2013-02-03 101 views
1

我在这方面见过various threads,但没有人能够帮助我。基本上,我正在解释一个KML文件,目的是将它加载到地图中,但命名空间真的让我感到困扰。下面是KML的例子:XPath和命名空间

<?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] 

这样的想法是,我想所有的页面上的标元素。所以我用这个代码:

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

然而,我越来越diddly-SQUIT出来,只是一个空数组。任何人都可以看到我做错了什么?

+0

我一直来到我身边这通过使用'$ xml-> children()' - 我从来没有打扰过真正理解命名空间应该如何正确使用PHP .. – hank

+0

请让你看到你尝试过的各种线程中的哪一个你的情况没有特别的工作?请张贴您所有尝试的所有代码。另外我必须补充一点:为什么你认为你的代码应该工作?即使没有考虑名称空间也不行,在这个轴上你没有要求这样的元素。 – hakre

回答

1

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

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

然而,顶部元素不是 “Placemark” - 这是一个 “klm

解决方案

你想:

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