【问题标题】:XPath and Namespaces [duplicate]XPath 和命名空间 [重复]
【发布时间】:2013-02-03 16:38:09
【问题描述】:

我在这件事上见过various threads,但没有人能帮助我。基本上,我正在解释一个 KML 文件,目的是将其加载到地图中,但命名空间真的让我很困惑。这是 KML 的一个示例:

<?xml version="1.0" encoding="UTF-8">
<kml xmlns="http://www.opengis.net/kml/2.2" 
     xmlns:gx="http://www.google.com/kml/ext/2.2" 
     xmlns:kml="http://www.opengis.net/kml/2.2" 
     xmlns:atom="http://www.w3.org/2005/Atom">
 <Folder>
  <name>leeds primary schools (1 - 10)</name>
  <open>1<open>
  <Placemark>
      blah blah blah
  </Placemark>
  [etc etc etc]

所以我的想法是我想获取页面上的所有 Placemark 元素。所以我正在使用这段代码:

$xml = simplexml_load_string($xml_string);
$xml->registerXPathNamespace("n", "http://www.opengis.net/kml/2.2");
$Placemarks = $xml->xpath("/n:Placemark");

然而,我被骗了,只是一个空数组。谁能看到我做错了什么?

【问题讨论】:

  • 我总是通过使用 $xml-&gt;children() 来解决这个问题 - 我从来没有费心去真正理解命名空间应该如何与 PHP 一起正常工作..
  • 请说明您尝试过的各种线程中的哪些以及在您的情况下哪些线程不起作用?请发布您所有尝试的所有代码。另外我必须补充一点:你为什么认为你的代码应该工作?即使不考虑命名空间,它也不会起作用,在该轴上没有您要求的此类元素。

标签: php xml xpath simplexml kml


【解决方案1】:

$Placemarks = $xml->xpath("/n:Placemark");

这会尝试选择名为“n:Placemark”的顶部元素

但是,顶部元素不是“Placemark”——而是“klm

解决方案

你想要:

$Placemarks = $xml->xpath("/*/n:Folder/n:Placemark");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2014-04-19
    • 2018-08-13
    • 2023-03-13
    • 2011-03-11
    相关资源
    最近更新 更多