我遇到这种情况:
<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/>
之后的所有其他标签。
您知道如何选择此子集吗?
答案 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)]"/>