【问题标题】: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 2019-12-14
        • 2011-05-29
        相关资源
        最近更新 更多