Xml EXSLT节点设置剥离属性?
我以前注意到过这一点,但不记得我是如何克服它的。当节点设置XML字符串时,EXSLT似乎正在剥离属性 下面是一个人为的示例(为了简洁起见,我去掉了XSLT样式表标记,但是正在将EXSLT的公共库加载到名称空间Xml EXSLT节点设置剥离属性?,xml,xslt,xslt-1.0,exslt,Xml,Xslt,Xslt 1.0,Exslt,我以前注意到过这一点,但不记得我是如何克服它的。当节点设置XML字符串时,EXSLT似乎正在剥离属性 下面是一个人为的示例(为了简洁起见,我去掉了XSLT样式表标记,但是正在将EXSLT的公共库加载到名称空间exsl) XML <xml> <node /> <node /> <node /> </xml> XSLT: <xsl:template match="/"> <xsl:va
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/>
(请参见输出source)无需在输入XML中的节点上使用
exsl:node set
。只有在变量中构造结果树片段,然后希望使用XPath选择结果树片段中的节点时,才需要使用它
对于示例输入,
节点
元素没有任何属性。而且模板匹配节点
永远不会应用,因为与文档节点匹配的模板只是在输入中选择xml/node
元素创建一个变量,然后将它们的副本输出到结果树。Martin Honnen的响应中需要补充的另一点是:EXSLT是一个规范,而不是一个实现。如果有bug,它是在实现中,而不是在规范中。所以我们需要知道您使用的是什么实现
但是,您没有提供bug的证据。您似乎对exslt:node-set()的用途感到困惑。愚蠢的我。这是漫长的一天。很明显,我本打算应用这些模板——在我的实际代码中,我是这样做的,但在这个演示中,我巧妙地避免了这一关键行。我想今晚我的脑子已经准备好了。我很清楚节点集的需求情况,只是我做了一个非常愚蠢的疏忽。谢谢。您的示例不需要
exsl:node set
,执行
即可。只要只想用
复制结果树片段,就不需要exsl:node set
函数。只需选择结果树片段中的节点,例如
。再次感谢-不知道结果树片段。