我正在用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
如果你想使用load
或loadXML
,你的标记必须是有效的X(HT)ML。HTML是基于SGML的。试试loadHTML
或loadHTMLFile
。
注意,当您使用loadHTML
或loadHTMLFile
时,DOM将尝试修复任何无效的HTML,以达到DOM可工作的程度。例如,它将在任何部分HTML文档周围添加一个基本的HTML框架,这可能会对XPath查询产生影响(但''a
的情况除外)。
尝试:
$links = $xpath->query('//a/@href');