parsing html with DOMDocument


parsing html with DOMDocument

我正在用php中的DOMDocument解析html。

我发现我无法选择所有使用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查询选择节点时做错了什么?

谢谢

无法复制:http://codepad.org/N8BlsQro

如果你想使用loadloadXML,你的标记必须是有效的X(HT)ML。HTML是基于SGML的。试试loadHTMLloadHTMLFile

注意,当您使用loadHTMLloadHTMLFile时,DOM将尝试修复任何无效的HTML,以达到DOM可工作的程度。例如,它将在任何部分HTML文档周围添加一个基本的HTML框架,这可能会对XPath查询产生影响(但''a的情况除外)。

尝试:

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