Re[5]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 24.01.08 14:00
Оценка: 3 (1) +1
Здравствуйте, embla, Вы писали:

E>Прошу прощения, я здесь недавно. какая кнопка?


В правом верхнем углу.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[5]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 20.02.08 15:57
Оценка: 3 (1) +1
Здравствуйте, <Аноним>, Вы писали:

А>дело в том, что 'node 11', то есть имя атрибута, мне приходит в качестве параметра.

А>И здесь обнаружился прелюбопытный баг: ИЕ не воспринимает параметры в тегах match, хотя прекрасно с ними работает в том же select. Может быть эту особенность формирует и фреймворк(хотя в ФФ все работает чудесно), но оно есть.

Попробуй так:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:param name="node-name" />

  <xsl:template match="*">
    <xsl:choose>
      <xsl:when test="@name = $node-name">
        <xsl:copy-of select="."/>
      </xsl:when>
      <xsl:when test=".//*[@name = $node-name]">
        <xsl:copy>
          <xsl:copy-of select="@*"/>

          <xsl:apply-templates select="*"/>
        </xsl:copy>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
... << RSDN@Home 1.2.0 alpha rev. 786>>
скопировать ноду с предками и потомками с помощью xsl
От: embla  
Дата: 23.01.08 22:30
Оценка:
дано:
<data id='root'>
  <node name='node1'>
    <node name='node11'>
       ...
    </node>
     <node name='node12'>
       ...
    </node>
  </node>
  <node name='node2'>
  ...
 </node>
</data>


Надо чтобы осталась только ветка ноды 11
<data id='root'>
  <node name='node1'>
    <node name='node11'>
       ...
    </node>
  </node>
</data>


делаю при помощи

<xsl:template match="/">
<xsl:copy-of select="//node[@name='node11']|@*"/>
</xsl:template>
но так оно выдает только саму node11 и её потомков.

а так
<xsl:template match="/">
<xsl:copy-of select="./*/*[@name='node11']|@*"/>
</xsl:template>
вообще не может создать выходной xml

Спасибо
Re: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 23.01.08 23:01
Оценка:
Здравствуйте, embla, Вы писали:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="*[@name = 'node11']">
    <xsl:copy-of select="."/>
  </xsl:template>

  <xsl:template match="*[.//*[@name = 'node11']]">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      
      <xsl:apply-templates select="*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="*" />
</xsl:stylesheet>


Оно?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: скопировать ноду с предками и потомками с помощью xsl
От: embla  
Дата: 24.01.08 11:04
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, embla, Вы писали:


L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:template match="*[@name = 'node11']">
L>    <xsl:copy-of select="."/>
L>  </xsl:template>

L>  <xsl:template match="*[.//*[@name = 'node11']]">
L>    <xsl:copy>
L>      <xsl:copy-of select="@*"/>
      
L>      <xsl:apply-templates select="*"/>
L>    </xsl:copy>
L>  </xsl:template>

L>  <xsl:template match="*" />
L></xsl:stylesheet>
L>


L>Оно?



Да, оно.
Спасибо Вам большое!
Re[3]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 24.01.08 12:13
Оценка:
Здравствуйте, embla, Вы писали:


E>Да, оно.

E>Спасибо Вам большое!

Для спасибо есть кнопка.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: скопировать ноду с предками и потомками с помощью xsl
От: embla  
Дата: 24.01.08 13:54
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, embla, Вы писали:



E>>Да, оно.

E>>Спасибо Вам большое!

L>Для спасибо есть кнопка.


Прошу прощения, я здесь недавно. какая кнопка?
Re[2]: скопировать ноду с предками и потомками с помощью xsl
От: viko  
Дата: 01.02.08 12:52
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, embla, Вы писали:


L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:template match="*[@name = 'node11']">
L>    <xsl:copy-of select="."/>
L>  </xsl:template>

L>  <xsl:template match="*[.//*[@name = 'node11']]">
L>    <xsl:copy>
L>      <xsl:copy-of select="@*"/>
      
L>      <xsl:apply-templates select="*"/>
L>    </xsl:copy>
L>  </xsl:template>

L>  <xsl:template match="*" />
L></xsl:stylesheet>
L>


L>Оно?



Извините, вы не подскажете, как в данном xsl использовать if?
То есть, допустим, если приходит параметр 'true', то искать ноду с именем node11, а если 'false', то node12?
Re[2]: скопировать ноду с предками и потомками с помощью xsl
От: embla  
Дата: 20.02.08 15:04
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, embla, Вы писали:


L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:template match="*[@name = 'node11']">
L>    <xsl:copy-of select="."/>
L>  </xsl:template>

L>  <xsl:template match="*[.//*[@name = 'node11']]">
L>    <xsl:copy>
L>      <xsl:copy-of select="@*"/>
      
L>      <xsl:apply-templates select="*"/>
L>    </xsl:copy>
L>  </xsl:template>

L>  <xsl:template match="*" />
L></xsl:stylesheet>
L>



А если не использовать условие node[@name='node11'] в теге match?
потому как возникают проблемы в ИЕ с передачей параметра.
Можно ли это сделать по другому?
Re[3]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 20.02.08 15:17
Оценка:
Здравствуйте, embla, Вы писали:

E>А если не использовать условие node[@name='node11'] в теге match?

E>потому как возникают проблемы в ИЕ с передачей параметра.

Чего за параметр? Где он здесь?

E>Можно ли это сделать по другому?


Не исключено.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: скопировать ноду с предками и потомками с помощью xsl
От: Аноним  
Дата: 20.02.08 15:45
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, embla, Вы писали:


E>>А если не использовать условие node[@name='node11'] в теге match?

E>>потому как возникают проблемы в ИЕ с передачей параметра.

L>Чего за параметр? Где он здесь?


E>>Можно ли это сделать по другому?


L>Не исключено.


дело в том, что 'node 11', то есть имя атрибута, мне приходит в качестве параметра.
И здесь обнаружился прелюбопытный баг: ИЕ не воспринимает параметры в тегах match, хотя прекрасно с ними работает в том же select. Может быть эту особенность формирует и фреймворк(хотя в ФФ все работает чудесно), но оно есть.
Re[5]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 20.02.08 15:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>дело в том, что 'node 11', то есть имя атрибута, мне приходит в качестве параметра.

А>И здесь обнаружился прелюбопытный баг: ИЕ не воспринимает параметры в тегах match, хотя прекрасно с ними работает в том же select. Может быть эту особенность формирует и фреймворк(хотя в ФФ все работает чудесно), но оно есть.

В FF она работает не чудесно, а в нарущение стандарта.

A template rule is specified with the xsl:template element. The match attribute is a Pattern that identifies the source node or nodes to which the rule applies. The match attribute is required unless the xsl:template element has a name attribute (see [6 Named Templates]). It is an error for the value of the match attribute to contain a VariableReference. The content of the xsl:template element is the template that is instantiated when the template rule is applied.


здесь
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[6]: скопировать ноду с предками и потомками с помощью xsl
От: Аноним  
Дата: 20.02.08 15:59
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>дело в том, что 'node 11', то есть имя атрибута, мне приходит в качестве параметра.

А>>И здесь обнаружился прелюбопытный баг: ИЕ не воспринимает параметры в тегах match, хотя прекрасно с ними работает в том же select. Может быть эту особенность формирует и фреймворк(хотя в ФФ все работает чудесно), но оно есть.

L>В FF она работает не чудесно, а в нарущение стандарта.


L>

A template rule is specified with the xsl:template element. The match attribute is a Pattern that identifies the source node or nodes to which the rule applies. The match attribute is required unless the xsl:template element has a name attribute (see [6 Named Templates]). It is an error for the value of the match attribute to contain a VariableReference. The content of the xsl:template element is the template that is instantiated when the template rule is applied.


L>здесь


Да. Хорошо.
Этого я не нашла, потому слова по поводу бага забираю обратно.
Но, тем не менее, в обход match скопировать ноды у меня не получается.
Если делать селектом, приходится потом искусственно получать предков. а они дублируются, если подходящих нод несколько.
Re[7]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 20.02.08 16:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

L>>здесь


А>Да. Хорошо.

А>Этого я не нашла, потому слова по поводу бага забираю обратно.
А>Но, тем не менее, в обход match скопировать ноды у меня не получается.
А>Если делать селектом, приходится потом искусственно получать предков. а они дублируются, если подходящих нод несколько.

Посмотрите ниже по ветке.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[6]: скопировать ноду с предками и потомками с помощью xsl
От: Аноним  
Дата: 20.02.08 16:18
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>дело в том, что 'node 11', то есть имя атрибута, мне приходит в качестве параметра.

А>>И здесь обнаружился прелюбопытный баг: ИЕ не воспринимает параметры в тегах match, хотя прекрасно с ними работает в том же select. Может быть эту особенность формирует и фреймворк(хотя в ФФ все работает чудесно), но оно есть.

L>Попробуй так:


L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:param name="node-name" />

L>  <xsl:template match="*">
L>    <xsl:choose>
L>      <xsl:when test="@name = $node-name">
L>        <xsl:copy-of select="."/>
L>      </xsl:when>
L>      <xsl:when test=".//*[@name = $node-name]">
L>        <xsl:copy>
L>          <xsl:copy-of select="@*"/>

L>          <xsl:apply-templates select="*"/>
L>        </xsl:copy>
L>      </xsl:when>
L>    </xsl:choose>
L>  </xsl:template>
L></xsl:stylesheet>
L>


Да. Оно. Спасибо.
Re[6]: скопировать ноду с предками и потомками с помощью xsl
От: embla  
Дата: 29.02.08 15:03
Оценка:
L>
L><?xml version="1.0" encoding="utf-8"?>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
L>  <xsl:output method="xml" indent="yes"/>

L>  <xsl:param name="node-name" />

L>  <xsl:template match="*">
L>    <xsl:choose>
L>      <xsl:when test="@name = $node-name">
L>        <xsl:copy-of select="."/>
L>      </xsl:when>
L>      <xsl:when test=".//*[@name = $node-name]">
L>        <xsl:copy>
L>          <xsl:copy-of select="@*"/>

L>          <xsl:apply-templates select="*"/>
L>        </xsl:copy>
L>      </xsl:when>
L>    </xsl:choose>
L>  </xsl:template>
L></xsl:stylesheet>
L>


а как изменить значение атрибута только у потомков искомой ноды?
понимаю, что надо использовать <xsl:attribute name="attr">, но не получается установить только у потомков
Re[7]: скопировать ноду с предками и потомками с помощью xsl
От: Lloyd Россия  
Дата: 01.03.08 11:29
Оценка:
Здравствуйте, embla, Вы писали:

E>а как изменить значение атрибута только у потомков искомой ноды?

E>понимаю, что надо использовать <xsl:attribute name="attr">, но не получается установить только у потомков

Покажите, как не получается. Желательно с исходным документом.
... << RSDN@Home 1.2.0 alpha rev. 786>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.