【问题标题】:How to get node value / innerHTML with XPath?如何使用 XPath 获取节点值/innerHTML?
【发布时间】:2012-06-09 12:19:46
【问题描述】:

我有一个 XPath 可以选择我想要的类://div[@class='myclass']。但它返回给我整个 div(也有 <div class='myclass'>,但我想只返回这个标签的内容而不返回标签本身。我该怎么做?

【问题讨论】:

    标签: xml parsing xpath html-parsing


    【解决方案1】:
    node() = innerXml
    
    text() = innerText
    

    两者都是数组,所以text()[1] 是第一个子文本节点...

    【讨论】:

    • 多个文本节点在 XML 中的外观如何? text() 会返回所选节点的子节点的所有 innerTexts 的串联吗?
    • @CoDEmanX: <div>text1<span>text2</span>text3</div> 正如我所说,它是一个数组,所以div/node()[0] == div/text()[0] == text1 节点、div/node()[1] == span 节点和div/node()[2] == div/text()[1] == text3 节点 - 你会必须自己连接它们(手动或使用接受数组的辅助函数)。
    【解决方案2】:

    使用 xpath,您将得到返回的东西是路径中最后一个不是条件的东西。那是什么意思?好吧,条件是[](但你已经知道)和你的之间的东西,就像 pathElement[有一个 'class' 属性,值为 'my class']。 pathElement 直接位于[ 之前。

    [] 之外的所有东西都是路径,所以在//a/b/c[@blah='bleh']/d abcd 都是路径元素,blah 是属性,bleh 是文字值。如果这条路径匹配,它将返回一个d,最后一个非条件的东西。

    您的特定路径返回一个(一系列)div,它是 xpath 路径中的最后一件事。因此,此返回值包括顶级节点,div 在您的情况下,以及它(它们)下面的所有(它们的)子节点。节点可以是元素或文本(或 cmets、处理指令……)。

    在一个节点下面可以有多个文本节点,因此数组 pOcHa 谈论。 x/text() 返回所有作为 x 直接子节点的文本,x/node() 返回所有子节点,包括文本。

    【讨论】:

      【解决方案3】:

      老问题的新答案:

      对于这个 XML

      <div class="myclass">content</div>
      

      您可以使用 XPath 通过以下两种方式之一仅选择 content

      1. 文本节点选择

        这个 XPath,

        //div[@class='myclass']/text()
        

        将选择目标div元素的文本节点子节点, content,根据要求。

      2. 元素的字符串值

        这个 XPath,

        string(//div[@class='myclass'])
        

        将返回目标div元素的string-valuecontent,再次应要求。

        更多信息:这是note 解释元素的字符串值

        元素节点的string-valuestring-values 的所有文本节点 descendants 的元素 文档顺序中的节点。

      【讨论】:

      • King ... 你帮我解决了 string(xpath) ?
      【解决方案4】:

      你可以试试

      //div[@class='myclass']/child::*
      

      child::*选择上下文节点see details的所有子元素

      【讨论】:

        猜你喜欢
        • 2011-09-16
        • 2011-11-20
        • 2015-04-23
        • 2016-05-04
        • 2012-09-17
        • 2016-02-24
        • 2014-01-26
        • 2011-12-13
        相关资源
        最近更新 更多