我试过使用我在互联网上找到的例子......但它们没有用。
<?php
$sUrl = 'https://www.google.cz/';
$sUrlSrc = getWebsiteContent($sUrl);
// Load the source
$dom = new DOMDocument();
@$dom->loadHTMLFile($sUrl);
$xpath = new DomXPath($dom);
echo $xpath->query("/html/body[@id='gsr']/div[@id='viewport']/div[@id='main']/span[@id='body']/center/div[@id='lga']/div/div[@id='hplogo']");
?>
这应该得到这个文本:Českárepublika。但没有任何事情发生。 PHP Ver:5.3
答案 0 :(得分:1)
当您尝试echo $xpath->query(...);
时,您的代码没有发出致命错误这一事实表明您的DOMXPath
对象无效(请参阅下面的#2);如果这无效,则实际的DOMDocument
无效,这意味着它无法加载您指向的数据(即https://www.google.cz
)
如果这是真的,那很可能是因为您当前的PHP设置没有启用php_openssl
扩展名。没有它,PHP不知道如何加载https
包装器并且无法加载数据。
要验证,请确保您已启用以下错误报告(只需将它们放在脚本的顶部):
error_reporting(E_ALL);
ini_set('display_errors', 1);
启用php_openssl
扩展程序后,您应该再遇到两个错误:
您编写的xpath查询非常复杂(实际上并不正确;我还没有验证&#34;正确的完整路径&#34;但是,你现在的人并没有带回结果)。相反,您可以利用您之后的节点具有id
属性的事实,该属性应该是唯一的:
$nodes = $xpath->query('//div[@id="hplogo"]');
您不能简单地回显DOMXPath::query()
的返回值;这样做会导致致命错误Object of class DOMNodeList could not be converted to string
。相反,您可以执行以下任一操作:
// if you expect multiple values
$nodes = $xpath->query('//div[@id="hplogo"]');
foreach ($nodes as $node) {
echo $node->nodeValue . '<br />';
}
// or
// if you expect a single value
$node = $xpath->query('//div[@id="hplogo"]')->item(0)->nodeValue;
echo $node;
答案 1 :(得分:0)
你想要的是:
<?php
$sUrl = 'https://www.google.cz/';
$sUrlSrc = file_get_contents($sUrl);
// Load the source
$dom = new DOMDocument();
@$dom->loadHTMLFile($sUrl);
$xpath = @new DomXPath($dom);
echo $xpath->query("//div[@id='hplogo']")->item(0)->nodeValue;
请注意,您不需要浏览整个html来查找ID(始终是唯一的)。