Извлечь DOM-элементы из строки, в PHP

Возможные дубликаты:
обход страницы html с помощью php?
Лучшие методы анализа HTML

У меня есть одна строковая переменная в моем php- script, которая содержит html-страницу. Как я могу извлечь DOM-элементы из этой строки?

Например, в этой строке '<div class="someclass">text</div>' я хочу получить переменную 'text'. Как я могу это сделать?

Ответ 1

Вам нужно использовать класс DOMDocument и, более конкретно, его loadHTML, чтобы загрузить вашу HTML-строку в объект DOM.

Например:

$string = <<<HTML
<p>test</p>
<div class="someclass">text</div>
<p>another</p>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($string);


После этого вы сможете манипулировать DOM, используя, например, класс DOMXPath для выполнения XPath запросы на него.

Например, в вашем случае вы можете использовать что-то на основе этой части кода:

$xpath = new DOMXpath($dom);
$result = $xpath->query('//div[@class="someclass"]');
if ($result->length > 0) {
    var_dump($result->item(0)->nodeValue);
}

Вот, вот, вы получите следующий вывод:

string 'text' (length=4)


В качестве альтернативы вместо DOMDocument вы также можете использовать simplexml_load_string и SimpleXMLElement::xpath - но для сложных манипуляций я обычно предпочитаю использовать DOMDocument.

Ответ 2

Посмотрите DOMDocument и DOMXPath.

$DOM = new DOMDocument();
$DOM->loadHTML($str);

$xpath = new DOMXPath($DOM);
$someclass_elements = $xpath->query('//[@class = "someclass"]');
// ...