PHP:通过类名获取 DOM 元素

Posted

技术标签:

【中文标题】PHP:通过类名获取 DOM 元素【英文标题】:PHP: Getting DOM elements by classname 【发布时间】:2017-04-03 14:08:02 【问题描述】:

我有以下:

<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-&gt;getElementById('content'); 以便我可以定位&lt;div class="inner text-inner"&gt;

【问题讨论】:

【参考方案1】:

您可以使用 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'] 。 '/我的文件夹/' 。 '测试' 。 '.html'; $file = fopen($record,"w"); $txt = $doc->saveHtml($nodeList); fwrite($file,$txt); fclose($文件);它得到警告:DOMDocument::saveHTML() 期望参数 1 是 DOMNode,对象在 .. 中给出,并且 test.html 文件中没有保存任何内容 @Gorna-Bania 这是因为 $nodeList 是一个 DOMNodeList 对象。尝试改变这个:$txt = $doc-&gt;saveHtml($nodeList-&gt;item(0));

以上是关于PHP:通过类名获取 DOM 元素的主要内容,如果未能解决你的问题,请参考以下文章

原生JS通过类名(className)获取dom元素

ES6 - 原生js遍历DOM - document.querySelectorAll(‘.xx‘)给DOM元素添加删除类名 - dom.classList.add切换类名toggle

ES6 - 原生js遍历DOM - document.querySelectorAll(‘.xx‘)给DOM元素添加删除类名 - dom.classList.add切换类名toggle

js获取id号和class类名的区别

在jQuery中按类名计算Dom元素

js获取id号和class类名的区别