【问题标题】:PHP: Getting DOM elements by classnamePHP:通过类名获取 DOM 元素
【发布时间】:2026-02-11 19:20:06
【问题描述】:

我有以下:

<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;

【问题讨论】:

    标签: php html dom


    【解决方案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));