【问题标题】:Xpath query to get text in span with <H2> tagsXpath 查询以使用 <H2> 标签获取跨度文本
【发布时间】:2014-08-19 13:19:21
【问题描述】:

我想获取&lt;span class="general2"&gt; 之后的所有文本,包括&lt;h2&gt; 标签

我的 Html 内容如下

    <span class="general2" itemprop="articleBody"> I WANT THIS TEXT <a href="url">I WANT THIS TEXT</a>I WANT THIS TEXT<br />

<h2>I WANT THIS TEXT AND ALSO PRESERVE THE TAG</h2><br />
I WANT THIS TEXT</span>

我试过查询

//span[contains(@class,'general2')]

但它给了我所有的纯文本文本。想要类似的东西

//span[contains(@class,'general2')]/*[text() or local-name()='h3']

【问题讨论】:

    标签: php xpath


    【解决方案1】:

    由于您想要完全不同的元素,最好使用联合运算符| 将不同的元素连接在一起。您可以首先获取所有作为&lt;span/ 子元素的文本元素,然后是&lt;a/&gt; 的文本元素,最后但并非最不重要的&lt;h2/&gt; 元素。这应该有效:

    //span[contains(@class,'general2')]/text() | //span[contains(@class,'general2')]/h2 | //span[contains(@class,'general2')]/a/text()
    

    使用 XPath 3.0,这可以写得更优雅,因为它允许函数作为步骤:

    //span[contains(@class,'general2')]/(text() | h2 | a/text())
    

    【讨论】:

      【解决方案2】:

      这是宿主编程语言的任务。 XPath 的工作只是选择相关元素,然后您需要找到一种方法使用 PHP 来获取所选元素的 inner HTML 标记。也许是这样的(无论如何我都不是 PHP 人):

      $span = $xpath->query('//span[contains(@class,'general2')]');
      echo $dom->saveXML($span->item(0));
      

      高于 sn-p 的 PHP 参考:Get inner HTML of parent element with php and xpath, How to get innerHTML of DOMNode?

      【讨论】:

        猜你喜欢
        • 2019-03-20
        • 1970-01-01
        • 2019-11-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        相关资源
        最近更新 更多