Pregunta

Estoy escribiendo un guión que lee y manipula un documento KML (XML). A continuación se muestra un fragmento del documento que estoy leyendo:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by Feature Manipulation Engine 2009 (Build 5658) -->
<kml xmlns="http://earth.google.com/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <Document>
        <name>South Australia</name>
        <visibility>1</visibility>
        <description><![CDATA[Statistical Local Area 2008]]></description>
        <Folder id="kml_ft_SA_SLA08">
            <name>SA_SLA08</name>
            <Placemark id="kml_1">
                <name>Mitcham (C) - West</name>
                <Style>
                    <!-- style info blah blah -->
                </Style>
                <Polygon>
                    <!-- blah blah -->
                </Polygon>
            </Placemark>

            <!-- snip lots more Placemarks -->
        </Folder>
    </Document>
</kml>

El problema que estoy teniendo es con el uso de XPath para seleccionar nada de él!

$doc = new DOMDocument();
$doc->load('myfile.xml');    // returns true
$xp = new DOMXPath($doc);

$places = $xp->query("//Placemark");
echo $places->length;         // --> 0 ??!!??
$everything = $xp->query("//*"); // (so I know that the XPath isn't fully borked)
echo $everything->length;    // --> 2085 

¿Qué está pasando aquí?

¿Fue útil?

Solución

<?php
$doc = new DOMDocument();
$doc->load('file.xml');    // returns true
$xp = new DOMXPath($doc);
$xp->registerNamespace('ge', 'http://earth.google.com/kml/2.2');

$places = $xp->query("//ge:Placemark");
echo $places->length;         // --> 0 ??!!??
$everything = $xp->query("//*"); // (so I know that the XPath isn't fully borked)

//echo $doc->saveXML();

Al parecer, usted tiene que registrar el espacio de nombres 'ge' y consultar como tal, al menos esto es lo que me ocurrió después de unos minutos buscando en Google. Creo que a veces nos olvidamos de que estamos tratando con espacios de nombres: p

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top