简单的HTML Dom-在div之后查找文本

时间:2019-05-05 04:40:51

标签: php dom

我需要使用Simple HTML Dom PHP库提取After div中的文本。我已经尝试过next_sibling()来获取文本,但这是行不通的。

<div class="one">one<div>
<div class="data">mydata</div>
get this text
<div class="two">two</div>

我的代码:

$res = $div->find('div[class="data]',0);
if($res->plaintext == 'mydata'){
    echo $res->next_sibling()->plaintext  ;
}

3 个答案:

答案 0 :(得分:0)

欢迎!

似乎您想使用DOMDocument方法来解析HTML。如果是这种情况,您可以实例化一个新对象,可能类似于:

$dir = '<div class="one">one<div>
<div class="data">mydata</div>
get this text
<div class="two">two</div>';

$dom = new DOMDocument();
$dom->loadHTML($dir);
$xpath = new DOMXpath($dom);

$res = $xpath->document->documentElement->textContent;

$textNodes = explode(PHP_EOL, $res);
foreach ($textNodes as $key => $text) {
    if ($text == 'mydata') {
        echo $textNodes[$key + 1];
        break;
    }
}

然后,您可以做与文档有关的所有事情。

输出:

get this text

文档

如果您var_dump($xpath->document->documentElement);,则可以了解如何使用documentElement对象的属性:

twoobject(DOMElement)#3 (18) {
  ["tagName"]=>
  string(4) "html"
  ["schemaTypeInfo"]=>
  NULL
  ["nodeName"]=>
  string(4) "html"
  ["nodeValue"]=>
  string(20) "one
mydata
two
three"
  ["nodeType"]=>
  int(1)
  ["parentNode"]=>
  string(22) "(object value omitted)"
  ["childNodes"]=>
  string(22) "(object value omitted)"
  ["firstChild"]=>
  string(22) "(object value omitted)"
  ["lastChild"]=>
  string(22) "(object value omitted)"
  ["previousSibling"]=>
  string(22) "(object value omitted)"
  ["nextSibling"]=>
  NULL
  ["attributes"]=>
  string(22) "(object value omitted)"
  ["ownerDocument"]=>
  string(22) "(object value omitted)"
  ["namespaceURI"]=>
  NULL
  ["prefix"]=>
  string(0) ""
  ["localName"]=>
  string(4) "html"
  ["baseURI"]=>
  NULL
  ["textContent"]=>
  string(20) "one
mydata
two
three"
}

答案 1 :(得分:0)

看起来您需要使用Simple_html_dom更改html内容。

我为您找到了一个返回get this text的解决方案。

$res = $html->find('div[class="data"]',0);
    if($res->plaintext == 'mydata'){
        $res->parent()->first_child()->outertext ='';
        $res->parent()->last_child()->outertext ='';
        echo $res->parent()->innertext;
    }

在我发现divclass='data'之后,我更改了html内容并删除了first和last元素,因此保留了所需的纯文本。

答案 2 :(得分:0)

我建议您为此使用JQuery,这非常简单 您可以输入

<script>
$(".data").append("whatever you want");
</script>

说明: jQuery中的$是全局选择元素 你把.class-name insinde $(“”) 然后使用方法appen() 添加元素