Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml EXSLT节点设置剥离属性?_Xml_Xslt_Xslt 1.0_Exslt - Fatal编程技术网

Xml 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

我以前注意到过这一点,但不记得我是如何克服它的。当节点设置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/>


(请参见输出source

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


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

Martin Honnen的响应中需要补充的另一点是:EXSLT是一个规范,而不是一个实现。如果有bug,它是在实现中,而不是在规范中。所以我们需要知道您使用的是什么实现


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

愚蠢的我。这是漫长的一天。很明显,我本打算应用这些模板——在我的实际代码中,我是这样做的,但在这个演示中,我巧妙地避免了这一关键行。我想今晚我的脑子已经准备好了。我很清楚节点集的需求情况,只是我做了一个非常愚蠢的疏忽。谢谢。您的示例不需要
exsl:node set
,执行
即可。只要只想用
复制结果树片段,就不需要
exsl:node set
函数。只需选择结果树片段中的节点,例如
。再次感谢-不知道结果树片段。