парсинг HTML с DOMDocument - PullRequest
       19

парсинг HTML с DOMDocument

1 голос
/ 18 июля 2011

Я анализирую HTML с DOMDocument в php.

Я обнаружил, что не могу выбрать все, используя запрос xpath. Однако метод getElementsByTagName () работает нормально.

Вот код:

$xml = new DOMDocument();
$xml->load("file.html");
$xpath = new DOMXPath($xml);

$links = $xpath->query("//a");
$links2 = $xml->getElementsByTagName("a");

foreach($links as $link){
    echo "<br>$k: ".$link->nodeValue; // this doesn't print the node value. $links is empty
}
foreach($links2 as $link){
    echo "<br>$k: ".$link->nodeValue; // this prints OK the node value
}

Я бы подумал, что xpath-> query ("// a") будет таким же, как getElementsByTagname ("a"), но, очевидно, это не так.

Может кто-нибудь сказать мне, почему они не одинаковы. Или, если они есть, что я делаю неправильно, чтобы выбрать узлы с помощью запроса xpath?

Спасибо

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Невозможно воспроизвести: http://codepad.org/N8BlsQro

Если вы хотите использовать load или loadXML, ваша разметка должна быть действительной X (HT) ML.HTML основан на SGML.Попробуйте использовать loadHTML или loadHTMLFile.

. Обратите внимание, что при использовании loadHTML или loadHTMLFile DOM будет пытаться исправить любой недопустимый HTML-код до такой степени, чтобы он работал для DOM.Например, он добавит базовый HTML-скелет вокруг любых частичных HTML-документов, и это может повлиять на ваши запросы XPath (но не в случае \\a).

0 голосов
/ 18 июля 2011

Попробуйте:

$links = $xpath->query('//a/@href');
...