EXSLT节点设置剥离属性?

时间:2013-09-23 16:05:24

标签: xml xslt xslt-1.0 exslt

我之前已经注意到了这一点,但不记得我是如何绕过它的。当节点设置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(参见输出来源

2 个答案:

答案 0 :(得分:1)

无需在输入XML中的节点上使用exsl:node-set。如果在变量中构造结果树片段,然后想要使用XPath在结果树片段中选择节点,则只需要使用它。

对于样本输入,node个元素都没有任何属性。并且永远不会应用匹配node的模板作为匹配文档节点的模板,只需在输入中创建一个选择xml/node元素的变量,然后将它们的副本输出到结果树中。

答案 1 :(得分:-1)

另外一点是要添加到Martin Honnen的回复中:EXSLT是一个规范,而不是一个实现。如果有错误,那就是实现,而不是规范。所以我们需要知道你正在使用什么实现。

但是,您没有提供任何错误证据。你似乎对exslt:node-set()的目的感到困惑。