PHP 简单 Dom HTML 解析器的错误解析语法

Wrong parsing syntax for PHP Simple Dom HTML Parser

我正在使用此代码:

$results = '<div class="collection__list" data-type="Other1">DIV1</div><div class="collection__list" data-type="Other2">DIV2</div>'; 

$html = str_get_html($results);

$articles = $html->find('div[class=collection__list, data-type=Other1]', 0);

echo $articles; 

没有打印出来。不是应该打印出 "DIV1" div 吗?

您不能使用简单 HTML DOM 解析器搜索多个属性。也许这太简单了?如果您使用内置的 DOM 解析器,这可以正常工作,但它确实需要熟悉 XPath:

<?php
$results = '<div class="collection__list" data-type="Other1">DIV1</div><div class="collection__list" data-type="Other2">DIV2</div>'; 
$dom = new DomDocument();
$dom->loadHTML($results, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
$xpath = new DomXpath($dom);
$nodes = $xpath->query("//div[@class='collection__list' and @data-type='Other1']/text()");
foreach ($nodes as $node) {
    echo $node->nodeValue;
}

我想可以循环搜索,但真正使用内置函数将是一种更强大和标准化的解决方案,或者至少使用现代解决方案。这 "library" 确实是过去的遗物,不符合任何现代编程实践。

<?php
$results = '<div class="collection__list" data-type="Other1">DIV1</div><div class="collection__list" data-type="Other2">DIV2</div>'; 
$html = str_get_html($results);
foreach ($html->find('div[class=collection__list]') as $article) {
    if ($article->attr["data-type"] === "Other1") {
        echo $article;
        break;
    }
}