检索特定的先前兄弟节点属性

Mat*_*ARD 0 xml xpath

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

在下面的示例中,我想检索在标有该元素的元素之前的alt每个img节点的属性值.divid=marker

<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>
Run Code Online (Sandbox Code Playgroud)

对于此示例,我想检索值1 2 3 4.
我使用以下XPath查询

//div[@id='marker']/preceding-sibling::img
Run Code Online (Sandbox Code Playgroud)

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

<img alt="1" src="file.gif"/>
<img alt="2" src="file.gif"/>
<img alt="3" src="file.gif"/>
<img alt="4" src="file.gif"/>
Run Code Online (Sandbox Code Playgroud)

由于它是一个节点列表,我可以在节点上迭代以检索我正在寻找的属性值,但是有一种XPath方式吗?我原以为能够写下这样的东西:

//div[@id='marker']/preceding-sibling::img@alt
or //div[@id='marker']/preceding-sibling@alt::img
Run Code Online (Sandbox Code Playgroud)

但是,一旦你使用了XPath Axe类似的兄弟姐妹,我甚至不知道是否可能.

Dim*_*hev 5

用途:

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

这将选择属性具有值的某个元素(XML文档中的任何位置)的兄弟节点之前alt的所有img元素的所有属性(属性节点)名称.divid'marker'

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

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