は、次のコードを考える:このDOMXpathクエリが兄弟ノードの値をマージする理由を教えてください。
$html = "<h1>foo</h1><h2>bar</h2>";
$document = new DOMDocument();
$document->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($document);
$h1Nodes = $xpath->query('//h1');
foreach ($h1Nodes as $h1Node) {
var_dump($h1Node->nodeValue);
}
H1タグは、テキスト 'FOO' でのみテキストノードが含まれています。テキスト 'bar'は兄弟見出しノード(h2)にあります。私は出力が 'foo'になると期待しています。
ただし、出力は 'foobar'です。
なぜですか?
'LIBXML_HTML_NOIMPLIED'は、暗黙のhtml/body ...要素の自動追加を無効にするために使用されます。したがって、 'LIBXML_HTML_NOIMPLIED'を追加する場合、htmlに' 'タグを追加する必要があります。あなたが 'LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD'のように出力されます。 –