有没有办法使用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
我得到了当前的那个,没有问题。
答案 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>