xml - XSL+XPATH : Compare previous node attribute to current node attribute

标签 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 节点。我无法使用前同级,因为尽管它处于相同的嵌套级别,但它嵌套在不同的集合中。

最佳答案

如果您使用 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/

相关文章:

c# - XML 序列化 - XmlCDataSection 作为 Serialization.XmlText

xml - 忽略子节点的 XPath 表达式

xml - 为什么微软匹配一个XSD xs :integer to a string when importing WSDL?

java - 无法让 setParameter 在 XSLT 转换器中工作

c# - 将 Linq 转换为 XSLT

xml - 使用 xslt 重命名重复属性

xpath - a/img/..//text()和a//text()之间的区别

sql - T-SQL 中的 XPath 选择实体

php - API 或 XML : Get sentence by word service

xslt - 如何从元素中的文本末尾删除空格。 (XSL)