0

我正在加载一个 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 文件。

知道为什么它不循环吗?

4

2 回答 2

3

我不确定为什么 XPath 不起作用,但是根据我在那里看到的 XML 结构,你真的不需要 XPath。SimpleXMLElements 可能有点看跌,但使用这种替代循环结构将非常容易:

foreach( $places->place as $place )
{
    echo "a";
}

而且您根本不需要 xpath 查询的开销;你想要的结构已经在那里了。

于 2012-04-30T17:06:32.953 回答
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');

place此查询现在选择您要查找的 20 个左右的元素。

另请参阅:SimpleXML:使用包含名称空间的 XML

于 2012-04-30T18:17:19.877 回答