我试图找出如何将之前的节点属性值与当前节点属性值进行比较。以下是我目前的尝试方式:
<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,因为虽然它处于相同的嵌套级别,但它嵌套在不同的集合中。
答案 0 :(得分:1)
如果使用test="not(@title = preceding::*/@title)"
,则将上下文节点的title
属性与之前的任何属性进行比较。但是,您可能希望提供有关输入结构和需要执行的测试的更多详细信息,可能您只想检查前面的兄弟test="not(@title = preceding-sibling::*/@title)"
或甚至只检查前一个兄弟test="not(@title = preceding-sibling::*[1]/@title)"
。