xslt - 剥离子项后存储节点

时间:2014-02-28 16:09:33

标签: xml xslt-1.0

在删除一个不需要的元素后,如何将节点集存储到变量?输入xml的示例

<we:head xmlns:we="http://etest">

<we:abc>123</we:abc>
<we:tst>fgh</we:tst>
<we:sub>
<df></df>
</we:sub>

</we:head>

我希望变量在xslt中访问时具有以下内容,sub应该被删除

<we:head xmlns:we="http://etest">

<we:abc>123</we:abc>
<we:tst>fgh</we:tst>

</we:head>

请注意,我正在使用xslt 1.0而且我也不希望将其传递给输出,应该能够从xslt中的变量访问

1 个答案:

答案 0 :(得分:0)

正如Daniel所说:将临时树计算到变量中并不困难:

<xsl:variable name="foo">
    <!-- do whatever XSLT is needed here to produce the XML results -->
</xsl:variable>

但是在XSLT 1.0中,这将是result tree。您可以将结果树复制到输出中,但不能在XSLT中进一步处理它。要做到这一点,你需要把它变成nodeset,1.0规范没有定义这样做的机制。

许多早期处理器都添加了自定义扩展功能,可以这样做。目前大多数处理器都支持标准化的EXSLT node-set() extension function,它具有更好的便携性。

XSLT 2.0通过删除result treesnodesets之间的区别来解决这个问题,使用概念temporary tree来涵盖两者。因此,在2.0中,您可以简单地导航变量,而无需先将其转换为节点集。