考虑下面的代码:为什么这个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标签只包含文本节点与文本“富”。文本“栏”位于兄弟标题节点(h2)中。我期望输出是'foo'。
但是,输出是'foobar'。
为什么?
'LIBXML_HTML_NOIMPLIED'用于关闭隐含的html/body ...元素的自动添加。所以,如果您添加'LIBXML_HTML_NOIMPLIED',那么您必须在您的html中添加''标签。如果您删除了'LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD'然后你的输出如预期。 –