我不明白为什么我的xpath查询返回第二个url的正确href而不是第一个url。 HTML代码看起来一样。它包含相同类型的结构。但不知何故没有返回href。 (我只是注释掉每个$ url来测试它)
$url = "http://apps.facebook.com/TexasHoldEmPoker/"; // this one does not work
//$url = "http://nu.nl"; // this one works
$response = wp_remote_get($url);
$data = $response['body'];
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->strictErrorChecking = false;
$href='';
if (!$dom->loadHTML($data))
{
foreach (libxml_get_errors() as $error)
{
}
libxml_clear_errors();
}
else
{
$xpath = new DOMXPath($dom);
$elements = $xpath->query("/html/head/link[@rel='shortcut icon']");
if (!is_null($elements))
{
foreach ($elements as $element)
{
if ($element->getAttribute('href'))
{
$href = $element->getAttribute('href');
}
}
}
}
echo $href;
所以我知道代码对于“nu.nl”工作正常,但不知何故不适用于facebook应用页面。我无法理解为什么结构是相同的。
P.S。 :完整代码:http://plugins.svn.wordpress.org/wp-favicons/trunk/plugins/sources/page.php
答案 0 :(得分:2)
看看$dom->saveXML()
。
您会看到<link>
- 元素是 body 的子元素,而不是像预期的那样 head 。
所以xpath应该是:
/html/body/link[@rel='shortcut icon']
或
//link[@rel='shortcut icon']
我猜不同的标记是解析器在尝试修复<noscript>
内的非法<head>
时的结果(包含此<noscript>
后头部内的所有内容都已移至<body>
)