2014-02-28 38 views
0

如何删除一个不需要的元素后将节点设置为变量?如果例如输入XMLxslt - 剥离子节点后的存储节点

<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 1.0和低于XSLT访问时,子应该被删除

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

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

</we:head> 

还请注意,我不希望这样的被传递到输出,应该可以作为丹尼尔说,从变量访问XSLT

+0

如果不使用'exsl:node-set()'(来自http://www.exslt.org/)等扩展函数,那么您将无法在XSLT 1.0中执行此操作。你的处理器支持exslt吗? –

回答

0

:计算一个临时的树到一个变量并不难:

<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中,您可以直接在变量上导航,而无需先将其转换为节点集。

+0

以下代码是否工作我也可以使用exsl:node-set()函数 – Suresh