Php 用DOMDocument解析html
我正在用php中的DOMDocument解析html 我发现我无法使用xpath查询选择所有。但是getElementsByTagName()方法工作正常 代码如下:Php 用DOMDocument解析html,php,xpath,domdocument,Php,Xpath,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"); f
$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
}
$xml=newDOMDocument();
$xml->load(“file.html”);
$xpath=newdomxpath($xml);
$links=$xpath->query(“//a”);
$links2=$xml->getElementsByTagName(“a”);
foreach($links作为$link){
echo“
$k:”.$link->nodeValue;//这不会打印节点值。$links为空
}
foreach($links2作为$link){
echo“
$k:”.$link->nodeValue;//这将打印节点值
}
我本以为xpath->query(“//a”)与getElementsByTagname(“a”)相同,但显然不是
谁能告诉我为什么它们不一样。或者,如果是,我使用xpath查询选择节点的错误是什么
谢谢试试:
$links = $xpath->query('//a/@href');
无法复制:
如果要使用load
或loadXML
标记必须是有效的X(HT)ML。HTML基于SGML。尝试使用loadHTML
或loadHTMLFile
请注意,当您使用
loadHTML
或loadHTMLFile
时,DOM将尝试修复任何无效的HTML,使其对DOM可用。例如,它将在任何部分HTML文档周围添加一个基本的HTML框架,这可能会对您的XPath查询产生影响(但在\\a
的情况下不是这样)。OP不希望获得href属性他已经声明了//a对他不起作用,因此建议了一个替代方法。如果//a
没有给出任何结果,为什么//a/@href
应该给出任何结果?我使用它,但只是从标记中检索链接,所以我认为它可能会非常有帮助。。。或者,我们不是要提出过去对我们有用的东西吗?:)哦,我们中的一些人实际上是在做其他事情的同时工作和做这件事,所以没有时间重现每个问题的代码。。。看起来你们手头有很多时间:)@Brian好吧,问题是使用@href
从元素的属性轴中拾取。但是如果XPath一开始没有返回任何a元素,那么尝试从属性轴获取就无法工作。所以这是一个有点奇怪的建议。这就像说:当没有门的时候,穿过门,坐在椅子上。谢谢你尝试复制。它暗示我需要它。我的问题是加载文件的时候。我需要使用$xml->loadHTMLfile('file.html')
而不是load()
方法加载。Gordon,由于某些原因,我没有看到将您的评论标记为答案的链接将我的评论移动到答案