2013-02-03 6 views
1

이 문제에 관해서는 various threads을 보았지만 어느 누구도 저를 도울 수 없었습니다. 기본적으로 KML 파일을지도에로드하려는 의도로 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"); 

아직까지는 비어있는 배열을 사용하고 있습니다. 누구든지 내가 잘못하고있는 것을 볼 수 있습니까?

+0

난 항상 주위에왔다 이것은'$ xml-> children()'을 사용하여 - 네임 스페이스가 PHP에서 올바르게 작동하는 방법을 실제로 이해하지 못했습니다. – hank

+0

다양한 스레드 중 어떤 것을 시도했는지 표시하고 네 사건에서 구체적으로 작동하지 않은 것은 무엇인가? 모든 시도의 모든 코드를 게시하십시오. 또한 추가해야합니다 : 왜 당신의 코드가 작동한다고 생각합니까? 네임 스페이스를 고려하지 않고 작동하지 않는다고해도, 그 축에서 요구하는 요소는 없습니다. – hakre

답변

1

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

이것은 "n:Placemark"라는 상위 요소를 선택하려고합니다.

그러나, 최상위 요소가 아닌 "Placemark"입니다 - 그것은 "klm"

솔루션입니다 :

당신이 원하는 :

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