我以前注意到这一点,但不记得我是怎么绕过它的。当节点设置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/>演示游乐场 (参见output source)
发布于 2013-09-23 16:41:44
没有必要在输入XML中的节点上使用exsl:node-set。您只需要在变量中构造结果树片段,然后使用XPath在结果树片段中选择节点时,才需要使用它。
对于示例输入,没有一个node元素具有任何属性。模板匹配node永远不会应用,因为模板匹配文档节点只是创建一个变量,在输入中选择xml/node元素,然后将它们的副本输出到结果树中。
发布于 2013-09-23 21:27:44
还有一点要添加到Martin Honnen的响应中: EXSLT是一种规范,而不是实现。如果有错误,它在实现中,而不是规范中。因此,我们需要知道您使用的是什么实现。
但是,您没有提供任何bug的证据。您似乎对exslt:node-set()打算做什么感到困惑。
https://stackoverflow.com/questions/18963884
复制相似问题