4

動作しないこの基本的なコードがあります。html5lib php で Xpath を使用するにはどうすればよいですか? または、他の方法で HTML5 を使用した Xpath。

$url = 'http://en.wikipedia.org/wiki/PHP';
$response = GuzzleHttp\get($url);

$html5 = new Masterminds\HTML5();
$dom = $html5->loadHTML($response);

$xpath = new DOMXPath($dom);

$elements = $xpath->query('//h1');
//$elements = $dom->getElementsByTagName('h1');

foreach ($elements as $element)
{
    var_dump($element);
}

要素が見つかりません。ルート要素を取得するために使用し$xpath->query('.')ます(一般的にxpathは機能するようです)。$dom->getElementsByTagName('h1')は働いている。

4

2 に答える 2

5

オプションを使用しdisable_html_nsます。

$url = 'http://en.wikipedia.org/wiki/PHP';
$response = GuzzleHttp\get($url)->getBody();
$html5 = new Masterminds\HTML5(array(
    'disable_html_ns' => true, // add `disable_html_ns` option
));
$dom = $html5->loadHTML($response);

$xpath = new DOMXPath($dom);
$elements = $xpath->query('//h1');

foreach ($elements as $element) {
    var_dump($element);
}

https://github.com/Masterminds/html5-php#options

disable_html_ns(ブール値): パーサーが HTML5 名前空間を DOM ドキュメントに自動的に割り当てるのを防ぎます。これは、名前空間を認識しない DOM ツール用です。

于 2015-05-16T17:05:51.553 に答える