【问题标题】:PHP XML Not loading using XPathPHP XML 不使用 XPath 加载
【发布时间】:2012-04-30 15:21:58
【问题描述】:
我正在加载一个 XML 文件,如下所示:
$places=simplexml_load_file("http://www.43places.com/service/search_places?api_key=1234&q=america");
$allPlaces=$places->xpath('//place');
foreach($allPlaces as $title)
{
echo "a";
}
简单测试一下,文件加载正确,可以看到XML文件here。
知道为什么它不循环吗??
【问题讨论】:
标签:
php
xml
xpath
xml-parsing
【解决方案1】:
我不确定为什么 XPath 不起作用,但是根据我在那里看到的 XML 结构,您确实不需要 XPath。 SimpleXMLElements 可能有点看跌,但使用这种替代循环结构会非常容易:
foreach( $places->place as $place )
{
echo "a";
}
而且您根本不需要 xpath 查询的开销;你想要的结构已经在那里了。
【解决方案2】:
它没有循环,因为它不返回任何节点。那为什么会这样呢?
从技术上讲,<place> 元素位于它自己的命名空间中:http://www.43places.com/xml/2005/rc#,因此place 只是元素的所谓本地名称,而不是它的全名。 Xpath 不接受全名,但您可以使用您选择的名称(前缀)为 xpath 操作注册命名空间,然后在 xpath 查询中使用它:
$places->registerXPathNamespace("a", "http://www.43places.com/xml/2005/rc#");
$allPlaces = $places->xpath('//a:place');
此查询现在选择您要查找的 20 个左右的 place 元素。
另请参阅:SimpleXML: Working with XML containing namespaces。