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

时间:2010-05-26 22:15:53

标签: xml xpath

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

在以下示例中,我想检索标有alt的{​​{1}}元素前面的每个img节点的div属性的值。< / p>

id=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> 我使用以下XPath查询

1 2 3 4

以便检索我想要的节点列表

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

由于它是一个节点列表,我可以在节点上迭代以检索我正在寻找的属性值,但是有一种XPath方式吗? 我希望能够写出类似的内容:

<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']/preceding-sibling::img@alt or //div[@id='marker']/preceding-sibling@alt::img 之前的兄弟姐妹。

1 个答案:

答案 0 :(得分:5)

使用

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

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

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

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