不使用foreach就无法获得纯文本

时间:2018-09-12 18:10:18

标签: php simple-html-dom

我正在尝试使用simple_html_dom来获取一个HTML元素的纯文本(“此文本”):

<div class="parent">
    <span><i class="fa fa-awesome"></i>THIS TEXT</span>
</div>

我通过以下方式获取该文本:

foreach($html->find('div.parent span.child') as $text){
    echo $text->plaintext;
}

但这只是一个元素,我正在寻找一种无需使用foreach循环即可获得纯文本的方法(因为它只是一个元素)。

P.S:我一直在尝试:

$html->find('div.parent span.child', 1);

但是var_dump-导致NULL。 我也尝试过:

$html->find('div.delivery-status span.status', 1)->plaintext;

但是var_dump-导致:

  

注意:尝试获取非对象的属性“明文”   第19行的C:\ xampp \ htdocs \ curl \ index.php

我也阅读了文档,但是我似乎无法弄清楚这一点:(。有人可以帮助我,或者至少将我指向正确的方向吗?:-s

谢谢!:D

2 个答案:

答案 0 :(得分:1)

您使用的是一个很古老的库,但是看起来foreach循环是作者希望它工作的方式。对于返回大多数功能的节点列表的DOM功能,这是典型的。循环出了什么问题?您也可以在普通的旧PHP中执行此操作:

$html = <<< HTML
<div class="parent">
    <span><i class="fa fa-awesome"></i>THIS TEXT</span>
</div>
HTML;
$dom = new \DomDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$xpath = new \DOMXPath($dom);
$data = $xpath->query("//div[@class='parent']/span/text()");
echo $data[0]->textContent;

答案 1 :(得分:1)

问题中的<span>没有child css类,因此您的选择器不正确。另外,您似乎缺少了一点,即在调用find时,children的索引基于零。试试这个:

$str = '<div class="parent"><span><i class="fa fa-awesome"></i>THIS TEXT</span></div>';
$html = str_get_html($str);

// no .child for the span, and 0 as the index of target child
print $html->find('div.parent span', 0)->plaintext;