我试图找出如何将前一个节点属性值与当前节点属性值进行比较。这是我目前正在尝试的方法:
<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 节点。我无法使用前同级,因为尽管它处于相同的嵌套级别,但它嵌套在不同的集合中。
最佳答案
如果您使用 test="not(@title =leading::*/@title)"
,您可以将上下文节点的 title
属性与任何前面的属性进行比较。然而,您可能想提供有关输入结构和需要执行的测试的更多详细信息,也许您只想检查前面的同级 test="not(@title = previous-sibling::*/@title) “
甚至仅是前一个同级 test="not(@title = previous-sibling::*[1]/@title)"
。
关于xml - XSL+XPATH : Compare previous node attribute to current node attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24491471/