使用 DOMDocument 遍历 DOM 时出现问题

Problem with iterating throught DOM using DOMDocument

我有html这样的结构:

<div id="info">
     <h1>Some text</h1>
</div>
<div class="box_con">
    <div id="list">
        <dl>
            <dt>《Library of Heaven“s Path》 Volume 1</dt>
            <dd> <a style="" href="1300359.html">1 Swindler</a></dd>
        </dl>
    </div>
</div>

这是我的代码:

$doc = new DOMDocument;
@$doc->loadHTMLFile($url);
$volume_titles = [];
$title = $doc->getElementById('info')->childNodes->item(1)->nodeValue;
$volume_list = $doc->getElementById('list')->getElementsByTagName('dl');

而且我不知道如何迭代这个 dl 元素来检索 <a> href 和内容。我已经尝试了很多循环。

    $el = $volume_list->firstChild;
    do {
        var_dump($el);
    } while ($el = $el->nextSibling);



    $length = $volume_list->length;
    for ($i = 0; $i < $length; $i++) {
        $node = $volume_list->childNodes->item($i);
        var_dump($node);
        die();
    }


        foreach ($volume_list->childNodes as $volume) {
        //var_dump($volume_list->getElementsByTagName('dd')->item(0)->nodeValue);
        var_dump($volume);
        die();
    }

但没有任何效果

我认为主要问题是当您使用 getElementsByTagName() 时,这个 returns 节点列表(实际上是 DOMNodeList)。因此,当您想要访问(例如)该标签的第一项时,您将需要引用数组中的第一项。

如果您扩展初始代码以获取嵌套的标签元素,您可能会得到以下代码,该代码始终在 getElementsByTagName() 的结果上使用 [0] 来挑选第一项.

$title = $doc->getElementById('info')->childNodes->item(1)->nodeValue;
$volume_list = $doc->getElementById('list')->getElementsByTagName('dl');

$a = $volume_list[0]->getElementsByTagName('dd')[0]->getElementsByTagName('a');

echo $a[0]->getAttribute('href');