XSL + XPATH:将先前的节点属性与当前节点属性进行比较

时间:2014-06-30 13:40:12

标签: xml xslt xpath xslt-1.0 xslt-2.0

我试图找出如何将之前的节点属性值与当前节点属性值进行比较。以下是我目前的尝试方式:

<xsl:if test="not(preceding::*[1][@title=text()[self::*[@title]]])">

作为参考,这里几乎是每个节点的格式:

<item title="myTitle" page="X" link="__WKANCHOR_1i" backLink="__WKANCHOR_1j"/>

基本上,如果前面的节点与当前节点的标题匹配,我希望测试失败。

谢谢!

编辑:

以下是整个XML文档的格式:

<item title="myTitle" page="8" link="__WKANCHOR_w" backLink="__WKANCHOR_x">
  <item title="mySubTitle" page="8" link="__WKANCHOR_y" backLink="__WKANCHOR_z">
    <item title="mySubSubTitle" page="8" link="__WKANCHOR_10" backLink="__WKANCHOR_11"/>
  </item>
</item>
<item title="myTitle" page="8" link="__WKANCHOR_w" backLink="__WKANCHOR_x">
  <item title="mySubTitle" page="8" link="__WKANCHOR_y" backLink="__WKANCHOR_z">
    <item title="mySubSubTitle" page="8" link="__WKANCHOR_10" backLink="__WKANCHOR_11"/>
  </item>
</item>

一遍又一遍。所以,我在第二个mySubSubTitle节点,我想确保在它之前没有另一个mySubSubTitle节点。我不能使用previous-sibling,因为虽然它处于相同的嵌套级别,但它嵌套在不同的集合中。

1 个答案:

答案 0 :(得分:1)

如果使用test="not(@title = preceding::*/@title)",则将上下文节点的title属性与之前的任何属性进行比较。但是,您可能希望提供有关输入结构和需要执行的测试的更多详细信息,可能您只想检查前面的兄弟test="not(@title = preceding-sibling::*/@title)"或甚至只检查前一个兄弟test="not(@title = preceding-sibling::*[1]/@title)"