0

我以前注意到这一点,但不记得我是如何绕过它的。在节点设置 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(见输出

4

2 回答 2

1

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

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

于 2013-09-23T16:41:44.877 回答
-1

Martin Honnen 的回复中还有一点要补充:EXSLT 是一种规范,而不是一种实现。如果有错误,那是在实现中,而不是在规范中。所以我们需要知道你正在使用什么实现。

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

于 2013-09-23T21:27:44.863 回答