我之前已经注意到了这一点,但不记得我是如何绕过它的。当节点设置XML字符串时,EXSLT似乎正在剥离属性。
这是一个人为的例子(为简洁起见,我删除了XSLT样式表标记,但正在将EXSLT的公共库加载到名称空间exsl
中)。
XML
<xml>
<node />
<node />
<node />
</xml>
XSLT:
<xsl:template match="/">
<xsl:variable name='nodeset' select='exsl:node-set(xml/node)' />
<xsl:copy-of select='$nodeset' />
</xsl:template>
<xsl:template match='node'><node foo='bar' /></xsl:template>
结果
<node/><node/><node/>
Demo Playground(参见输出来源)
答案 0 :(得分:1)
无需在输入XML中的节点上使用exsl:node-set
。如果在变量中构造结果树片段,然后想要使用XPath在结果树片段中选择节点,则只需要使用它。
对于样本输入,node
个元素都没有任何属性。并且永远不会应用匹配node
的模板作为匹配文档节点的模板,只需在输入中创建一个选择xml/node
元素的变量,然后将它们的副本输出到结果树中。
答案 1 :(得分:-1)
另外一点是要添加到Martin Honnen的回复中:EXSLT是一个规范,而不是一个实现。如果有错误,那就是实现,而不是规范。所以我们需要知道你正在使用什么实现。
但是,您没有提供任何错误证据。你似乎对exslt:node-set()的目的感到困惑。