XSLT: копирование нескольких узлов только xml в переменную

Существует ли способ скопировать 2 или 3 узла XML в переменную с помощью XSLT? Я ищу узлы, а не значения узлов.

Мой пример XML:

<node1>
  <node2>
    <node3>abc</node3> 
    <node4>def</node4> 
  </node2>
</node1>
<node1>
  <node2>
    <node3>123</node3> 
    <node4>456</node4> 
  </node2>
</node1>

И мой образец XSLT:

<xsl:for-each select="/node1/node2">
  <xsl:if test="current()/node4 ! = '456'">
    <xsl:copy-of select="./node3" />
    <xsl:copy-of select="./node4" />
  </xsl:if>
</xsl:foreach>

Проблема в том, что я получаю node4каждый раз как первый узел XML вместо текущего. On node3i’M get the current one and there’s no problem.

2 ответа

  1. Ваша проблема может быть вызвана проблемой RTF (результирующий фрагмент дерева) XSLT-1.0:

    Переменная не может содержать набор узлов (но только RTF)

    Я объяснил эту проблему в этом так ответить .

    RTFs не могут быть запрошены выражениями XPath-1.0, поэтому они полезны только в очень ограниченном подмножестве ситуаций.

    Одним из решений было бы использование более нового XSLT-2.0 .

  2. Это может помочь вам просто выбрать узлы, которые вы хотите все сразу.

    <xsl:variable name="sample">
       <xsl:copy-of select="/node1/node2[node4!='456']/*[name()='node3' or name()='node4']"/>
    </xsl:variable>