Неверный синтаксический синтаксис для PHP Simple Dom HTML Parser - PullRequest
0 голосов
/ 23 декабря 2018

Я использую этот код:

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

И ничего не печатается.Разве это не значит, что нужно распечатать div "DIV1"?

1 Ответ

0 голосов
/ 23 декабря 2018

Вы не можете выполнять поиск нескольких атрибутов с помощью простого HTML DOM Parser.Возможно, это слишком просто?Если вы используете встроенный синтаксический анализатор 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;
    }
}
...