Php XPath和名称空间

Php XPath和名称空间,php,xml,xpath,simplexml,kml,Php,Xml,Xpath,Simplexml,Kml,我在这件事上见过面,但没有人能帮我。基本上,我解释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文件的目的是将其加载到映射中,但名称空间真的把我搞砸了。以下是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]
然而,我确实被斜视了出来,只是一个空阵列。有人能看出我做错了什么吗

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

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

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

解决方案

你想要:

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

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

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

解决方案

你想要:

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

我总是通过使用
$xml->children()
-来解决这个问题-我从来没有费心去真正理解名称空间应该如何在PHP中正确工作。请显示您尝试过的各种线程中的哪些线程,以及在您的情况下哪些线程不工作?请张贴您所有尝试的所有代码。此外,我还要补充一点:为什么您认为您的代码应该工作?即使不考虑名称空间,它也不起作用,在这个轴中没有您要求的元素-我从来没有真正理解过名称空间应该如何在PHP中正常工作。请显示您尝试过的各种线程中的哪些线程,以及哪些线程在您的情况下不起作用?请张贴您所有尝试的所有代码。此外,我还要补充一点:为什么您认为您的代码应该工作?即使不考虑名称空间,它也不起作用,在该轴中没有您要求的此类元素。