是否有一种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
之前的兄弟姐妹。
答案 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()
强>