XSLT 1.0:根据current()节点

时间:2016-04-26 20:00:20

标签: xslt xpath xslt-1.0

我有一个基本的xml文件,如:

<base>
     ...
     <s l="something" />
     <s l="somethingelse" />
     <s>
     ...
</base>

在我的xslt中,我使用每个document()上的<s>函数来提取另一个文件结构如下:

<otherbase>
     ...
     <r l="something" />
     <r l="somethingelse" />
     <r l="evenmore" />
     ...
</otherbase>

在基本文件中的<s>,我正在尝试选择<r>任何 @l不匹配的所有preceding-sibling::*/@l当前<s>。因此,对于没有属性的第三个<s>,它将匹配<r l="evenmore" />等。

类似的东西:

<xsl:for-each select="document('mydoc.xml')//r[@l != preceding-sibling::*/@l]"> 
     ...
</xsl:for-each>
如果我在我认为的<r>属性中进行匹配,

会起作用,但我需要current()之前的兄弟姐妹...我还没有能够找出语法。

不幸的是,我的环境中没有2.0处理器,卡在xslt 1.0中。

1 个答案:

答案 0 :(得分:1)

如果要引用谓词中的当前current()节点,则需要使用s函数。尝试:

select="document('mydoc.xml')//r[not(@l = current()/preceding-sibling::s/@l)]"

另请注意$a != $bnot($a = $b)之间的区别。