XSLT:仅将xml的几个节点复制到变量

时间:2016-12-29 21:02:58

标签: xslt xslt-1.0

有没有办法使用XSLT将2或3个XML节点复制到变量?我正在寻找节点而不是节点值。

我的示例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的第一个节点而不是当前节点。在node3我得到了当前的那个,没有问题。

2 个答案:

答案 0 :(得分:0)

您的问题可能是由XSLT-1.0的RTF(结果树碎片)问题引起的:

  

变量不能包含节点集(但只包含RTF)

我在this SO answer中解释了这个问题。

XPath-1.0表达式无法查询RTF,因此它们仅在非常有限的情况子集中有用。

一种解决方案是使用the newer XSLT-2.0

答案 1 :(得分:0)

您可以帮助您一次选择所需的节点。

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