给出以下代码:
$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”。
为什么?
答案 0 :(得分:0)
感谢您的评论hardik solanki。
它引出了我的答案:有效标记必须有一个根元素。
我提供的标记没有标记,我使用过的标记会阻止库隐式添加标记。所以第一个标签被视为根元素,结果有点令人困惑。
删除这些标志有助于解决此问题,但我将它们用于某个目的。我只是想操纵一段HTML,而不是整个文档。我希望通过调用DOMDocument::saveHTML()
来获取此片段(在转换后)。没有doctype / <html>
/ <body>
标记。
我结束了这样做:
<html>
/ <body>
标记添加到我想要操作的HTML代码段中以获得临时的有效文档DOMDocument::saveHTML()
<html>
/ <body>
标记标记有效。