【问题标题】:XPath selection by innertext通过内部文本选择 XPath
【发布时间】:2010-01-04 10:28:54
【问题描述】:

我正在尝试从已解析的 XML 文档中提取具有特定内部文本的元素。我知道我可以使用//myparent[mychild='foo'] 选择具有特定内文的子元素的元素,但实际上我只想在此示例中选择“mychild”元素。

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

返回“mychild”节点的“foo”的 XPath 查询是什么?

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    你试过了吗?

    //myparent/mychild[text() = 'foo']
    

    或者,您可以使用self 轴的快捷方式:

    //myparent/mychild[. = 'foo']
    

    【讨论】:

    • 或 //myparent[mychild = 'foo']
    • @subtenante:谢谢,这正是我所需要的。
    • @Matt :如果 OP 想要选择 mychild 元素,那么您的解决方案将不起作用,它将选择 myparent 元素。
    【解决方案2】:

    马特说过,但完整的解决方案:

    //myparent[mychild='foo']/mychild
    

    【讨论】:

    • 它搜索“myparent”的所有子节点,其中“myparent”的任何“mychild”都将“foo”作为内部文本。
    【解决方案3】:

    如果测试结果如下所示,您可以考虑使用contains 函数返回真/假:

    //mychild[contains(text(),'foo')]
    

    函数参考见XSLT, XPath, and XQuery Functions

    【讨论】:

      【解决方案4】:

      根据 HTML:

      <myparent>
        <mychild>
          foo
        </mychild>
      </myparent>
      

      文本为 foo&lt;mychild&gt; 元素在其父 &lt;myparent&gt; 标记内,文本包含 leadingtrailing 空白个字符。

      因此,要选择&lt;mychild&gt; 元素,您可以使用以下任一解决方案:

      • 使用normalize-space()

        //myparent/mychild[normalize-space()='foo']
        
      • 使用contains()

        //myparent/mychild[contains(., 'foo')]
        

      忽略父标签&lt;myparent&gt;你也可以使用:

      • 使用normalize-space()

        //mychild[normalize-space()='foo']
        
      • 使用contains()

        //mychild[contains(., 'foo')]
        

      【讨论】:

        猜你喜欢
        • 2012-03-01
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 2011-04-21
        • 2020-02-07
        • 2015-04-18
        • 2016-09-30
        • 1970-01-01
        相关资源
        最近更新 更多