【问题标题】:XPath: address a value by a selector that is not parentXPath:通过非父选择器寻址值
【发布时间】:2022-01-03 11:33:42
【问题描述】:

我如何通过 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>

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    这可以简单地完成如下:

    //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
    

    【讨论】:

      【解决方案2】:

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

      • 使用以下

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

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

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

      【讨论】:

        【解决方案3】:
        //name[text()='B']/following-sibling::value
        

        获取带有 name 元素的标签 valuesibling 和文本 B

        【讨论】:

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