【问题标题】:Retrieve specific preceding sibling nodes attributes检索特定的先前兄弟节点属性
【发布时间】:2010-05-26 22:15:52
【问题描述】:

是否有一种 XPath 方法可以使用 XPath 查询直接恢复 XML 节点的先前兄弟节点的一个特定属性?

在以下示例中,我想检索标记为id=markerdiv 元素之前的每个img 节点的alt 属性值。

<content>
  <img alt="1" src="file.gif" />
  <img alt="2" src="file.gif" />
  <img alt="3" src="file.gif" />
  <img alt="4" src="file.gif" />
  <div id='marker'></div>
</content>

对于这个例子,我想检索值1 2 3 4
我使用以下 XPath 查询

//div[@id='marker']/preceding-sibling::img

为了检索我想要的节点列表

<img alt="1" src="file.gif"/>
<img alt="2" src="file.gif"/>
<img alt="3" src="file.gif"/>
<img alt="4" src="file.gif"/>

因为它是一个节点列表,所以我可以在节点上进行迭代以检索我正在寻找的属性值,但是有没有 XPath 方法呢? 我本来希望能够写出类似的东西:

//div[@id='marker']/preceding-sibling::img@alt
or //div[@id='marker']/preceding-sibling@alt::img

但我什至不知道一旦你使用了XPath Axe 像previous-sibling 这样是否有可能。

【问题讨论】:

  • @skaffman:请问您为什么删除了我的sibling 标签?

标签: xml xpath


【解决方案1】:

使用

//div[@id='marker']/preceding-sibling::img/@alt

这将选择所有img 元素的所有属性(属性节点)名称alt,这些元素是某些div 元素(XML 文档中的任何位置)的兄弟姐妹,其id 属性的值为'marker'

在 XPath 2.0 中,您甚至可以获得一系列字符串,这些字符串是这些 alt 属性的值

//div[@id='marker']/preceding-sibling::img/@alt/string()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多