Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用DOMDocument解析html_Php_Xpath_Domdocument - Fatal编程技术网

Php 用DOMDocument解析html

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

我正在用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
}
$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,由于某些原因,我没有看到将您的评论标记为答案的链接将我的评论移动到答案