XSLT将模板应用于子集

时间:2011-11-24 16:14:02

标签: xslt

我遇到这种情况:

<root>
 //first block other tags

 <data>something</data> //first
 <data>something</data>
 <data>something</data>
 ...others <data/>
 <data>something</data> //last

 //follows second block other tags
</root>

我需要在第一个<data/>之前将模板应用于所有标签,并将模板应用于上一个<data/>之后的所有其他标签。

您知道如何选择此子集吗?

2 个答案:

答案 0 :(得分:3)

要选择第一个数据元素之前的所有元素,请执行此操作

<xsl:apply-templates select="data[1]/preceding-sibling::*" />

要选择最后一个数据元素之后的所有元素,请执行此操作

<xsl:apply-templates select="data[last()]/following-sibling::*" />

或者,同时选择它们......

<xsl:apply-templates select="data[1]/preceding-sibling::*|data[last()]/following-sibling::*" />

这假设您位于 root 元素上,并且至少存在一个数据元素。

答案 1 :(得分:0)

  

我需要在第一个<data/>之前将模板应用于所有标签   将模板应用于最后<data/>之后的所有其他标记。

从提供的XML文档看来,第一个和最后一个data元素之间没有非data元素,因此使用

<xsl:apply-templates select="*[not(self::data)]"/>