如何解决使用PHP的Double Xpath不起作用
| 我使用PHP并通过URL成功加载了HTML文档。现在,我也成功地处理了第一个XPath,但是在同一个DOMDocument()上的第二个XPath似乎总是失败,没有错误,但是没有结果。是我的代码还是我想念的其他任何东西(我正在尝试从Apple的App Store站点试探性地抓取信息,实际上是对指定应用程序的描述://retrieving description
$path2 = \"//div[@class=\'product-review\'][1]/p[@class=\'truncate\']\";
$result_row = $xpath->query($path2);
print_r($result_row);
foreach($result_row as $rows){
echo \"haben was\";
print_r($rows);
$desc = $rows->childNodes->item(0)->textContent();
}
解决方法
您可以使用公共API从AppStore获得除顾客评论之外的几乎所有内容:
$appStore = json_decode(
file_get_contents(
\'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=387851294\'
)
);
echo $appStore->results[0]->description;
完整的Json结果示例
, 这似乎是一个名称空间问题。您的示例HTML源始于
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">
<html xmlns=\"http://www.apple.com/itms/\" lang=\"de\">
“ 3”表示文档具有默认的名称空间,因此所有XPath查询都需要引用该名称空间才能找到任何元素。 (有趣的是,他们在doctype中声称这是XHTML文档,但是他们未能在XHTML命名空间中进行设置。)
您需要注册<html>
使用的默认名称空间。因为<html>
在默认名称空间中,所以它没有任何前缀,但是为了使您的XPath正常工作,您还需要将此名称空间绑定到某个前缀,然后在XPath表达式中使用该前缀。
$your_xml_doc->registerXPathNamespace(\"ns\",\"http://www.apple.com/itms/\");
$path2 = \"//ns:div[@class=\'product-review\'][1]/ns:p[@class=\'truncate\']\";
没有名称空间前缀的XPath(1.0)表达式始终仅与无名称空间中的目标匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。