PHP Simple Dom HTML解析器的解析语法错误

时间:2018-12-22 22:14:35

标签: php simple-html-dom

我正在使用以下代码:

$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?

1 个答案:

答案 0 :(得分:0)

您无法使用简单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;
}

我想可以遍历搜索,但是实际上使用内置功能将是一种更强大,更标准化的解决方案,或者至少使用一种现代的解决方案。这个“图书馆”确实是过去的遗物,不符合任何现代编程实践。

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