2013-02-03 141 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");