PHP:通过类名获取DOM元素

6

我有以下内容:

<div id="content">
<div class="content-top">bla</div>
<div class="inner text-inner">
bla bla bla
</div>
</div>

还有PHP:

 $page = file_get_contents('http://www.example.com/test');
 @$doc = new DOMDocument();
 @$doc->loadHTML($page);
 $node = $doc->getElementById('content');

我应该如何修改$node = $doc->getElementById('content');以便能够定位到<div class="inner text-inner">
1个回答

14

您可以使用XPath轻松实现它。

$page = file_get_contents('http://www.example.com/test');
$doc = new DOMDocument();
$doc->loadHTML($page);   

$xpath = new DomXPath($doc);

$nodeList = $xpath->query("//div[@class='inner text-inner']");
$node = $nodeList->item(0);

// To check the result:
echo "<p>" . $node->nodeValue . "</p>";

这会输出:

bla bla bla

当我尝试将内容保存到文件时 // 记录条目 $record = $_SERVER['DOCUMENT_ROOT'] . '/myfolder/' . 'test' . '.html'; $file = fopen($record,"w"); $txt = $doc->saveHtml($nodeList); fwrite($file,$txt); fclose($file);会出现警告:DOMDocument :: saveHTML()期望参数1是DOMNode,但给出了一个对象..并且没有保存在test.html文件中。 - Gorna-Bania
@Gorna-Bania 这是因为 $nodeList 是一个 DOMNodeList 对象。尝试更改为:$txt = $doc->saveHtml($nodeList->item(0)); - nanocv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接