PHP XML 未使用 XPath 加载


PHP XML Not loading using XPath

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

知道为什么它没有循环吗?

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

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

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

它不是循环的,因为它不返回任何节点。这是为什么呢?

从技术上讲,<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:使用包含命名空间的 XML。