我是xpath的新手,并且遇到了PHP的古老XPath实现的麻烦。是正确的,//@url
只是//attribute::url
的缩写形式吗?我正在尝试查询flickr rss进行测试,但是缩写查询找到了正确的节点,而详细的查询返回0个元素:
$xml = file_get_contents('http://api.flickr.com/services/feeds/geo/?format=rss_200');
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
$xpath->query('//media:content/@url')->length > 0;
$xpath->query('//media:content/attribute::url')->length == 0;
我是否误解了w3c specs或者这是一个PHP错误?
相关问题:
成功查询按预期返回DOMAttr
个对象。但是没有办法直接得到这些节点的文本值吗?像//media:content/attribute::url/child::text()
这样的东西?我需要一个工具,其中xpath查询将由用户输入,如果我可以期待DOMText对象(而不是编码大量DOM *对象),错误检测会更好。
答案 0 :(得分:4)
关于你的相关问题,使用evaluate而不是查询来让php尝试返回一个类型化的结果。如果失败,则返回正常的节点列表
编辑:
您是否尝试过添加namespace?媒体:部分可能会把它扔掉一个循环。 e.g。
$xpath->registerNamespace('media', "http://search.yahoo.com/mrss/");
编辑2: 仅供参考,我也使用以下
在javascript中尝试了这个function nsResolve() {
return "http://search.yahoo.com/mrss/"
}
document.evaluate("//media:content/attribute::url",document,nsResolve,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
,它与使用@url(目前有7个结果)
的工作原理相同答案 1 :(得分:0)
//*@url
是否有效?