XPath:通过非父选择器寻址值

XPath: address a value by a selector that is not parent

我如何通过 XPath 解决一个选择器不在它之上(但在同一级别)的元素?

例如我想要名称为 B 的项目的值。不确定是否热,因为名称和值不在父关系中。

<root>
    <item>
        <name>A</name>
        <value>1</value>
    </item>
    <item>
        <name>B</name>
        <value>2</value>
    </item>
    <item>
        <name>C</name>
        <value>3</value>
    </item>
</root>

这可以简单地完成如下:

//item[./name='B']/value

这字面意思是:找到包含 name = "B" 的直接子元素的 item 元素 -> 找到这个 item 元素的直接子元素 value.
如果 name 和/或 value 不是 item 的直接子代,则上述表达式将为

//item[.//name='B']//value

另一种方法,如果每个 item 里面只有一个 name 和一个 value 可以是:

//item[name='B']/following-sibling::value
//name[text()='B']/following-sibling::value

获取元素 name 的标签 valuesibling with text [=13] =]B

要提取名称为 B 的项目的值,有多种方法如下:

  • 使用以下

    //item/name[text()='B']//following::value[1]
    
  • 使用跟随兄弟姐妹:

    //item/name[text()='B']//following-sibling::value[1]
    
  • 使用祖先:

    //name[text()='B']//ancestor::item[1]//value