Foros del Web » Programando para Internet » PHP »

Leer xml con xpath

Estas en el tema de Leer xml con xpath en el foro de PHP en Foros del Web. Hola a todos estoy buscando como leer un xml con xpath y no lo consigo, aqui el ejemplo de xml: coordenadas.xml Código: <?xml version="1.0" encoding="utf-8"?> ...
  #1 (permalink)  
Antiguo 28/09/2007, 01:22
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Leer xml con xpath

Hola a todos estoy buscando como leer un xml con xpath y no lo consigo, aqui el ejemplo de xml:

coordenadas.xml
Código:
<?xml version="1.0" encoding="utf-8"?>
<coordenadas>
 <ciudad id="1" x="100" y="100">
  <es_ES>Bilbao</es_ES>
  <eu_ES>Bilbo</eu_ES>
  <en_EN>Bilbao_EN</en_EN>
 </ciudad>
 <ciudad id="2" x="230" y="140">
  <es_ES>San Sebastian</es_ES>
  <eu_ES>Donosti</eu_ES>
  <en_EN>Donosti_EN</en_EN>
 </ciudad> 
 </coordenadas>
Como podria leer tanto los atributos como los valores de los hijos con xpath?

Muchas gracias.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #2 (permalink)  
Antiguo 28/09/2007, 14:46
 
Fecha de Ingreso: septiembre-2007
Mensajes: 52
Antigüedad: 16 años, 7 meses
Puntos: 2
Re: Leer xml con xpath

Si tienes algún ejemplo de código que estés usando, nos ayudaría si lo publicaras, aun cuando no funcione del todo bien, para poder construir en base a esa guía.

También sería importante saber qué versión de PHP tienes y qué extensiones XML tiene habilitadas tu instalación de PHP ya que hay más de una extensión en PHP para el uso de XPath. Principalmente en PHP4 está DomXml, y en PHP5 Dom, que son parecidas, pero incompatibles.

Mientras tanto, aquí tienes un ejemplo de cómo extraer datos desde el XML que has publicado, usando la extensión Dom de PHP5:

Código PHP:
<?php

$doc 
= new DOMDocument;

$doc->Load ('coordenadas.xml');

$xpath = new DOMXpath ($doc);


/*
 * Alternativa 1
 * -------------
 * Obtener una lista de elementos con una expresión xpath, y luego obtener
 * información asociada (en este caso los atributos 'x' y 'y' del padre)
 * usando expresiones xpath relativas
 */

// Expresión xpath para obtener todas las ciudades, en español
$consulta_ciudades 'ciudad/es_ES';

// Expresiones xpath para obtener las coordenadas de una ciudad
// (relativas al nodo de una ciudad)
$consulta_x '../@x';
$consulta_y '../@y';


$ciudades $xpath->query ($consulta_ciudades);

echo 
"Ciudades:\n";
foreach (
$ciudades as $ciudad) {
    
$nombre $ciudad->nodeValue;
    echo 
"$nombre\n";

    
$res_x $xpath->query ($consulta_x$ciudad);
    
$res_y $xpath->query ($consulta_y$ciudad);

    if (
$res_x->length && $res_y->length 0) {
        echo 
"  Coordenadas: ";
        echo 
$res_x->item (0)->nodeValue;
        echo 
'-';
        echo 
$res_y->item (0)->nodeValue;
        echo 
"\n";
    }
}


/*
 * Alternativa 2
 * -------------
 * Obtener solo la lista inicial de elementos con una expresión xpath, y
 * luego obtener toda la información relacionada mediante manipulación DOM
 */

$consulta_ciudades '//ciudad';

$ciudades $xpath->query ($consulta_ciudades);

echo 
"Ciudades:\n";
foreach (
$ciudades as $ciudad) {
    
$nombre '';

    for (
$nodo $ciudad->firstChild$nodo !== NULL;
         
$nodo $nodo->nextSibling) {

        if (
$nodo->nodeName == 'es_ES') {
            
$nombre $nodo->nodeValue;
        }

    }
    echo 
"$nombre\n";

    
$id 0;
    
$x  0;
    
$y  0;

    foreach (
$ciudad->attributes as $atributo) {
        if (
$atributo->nodeName == 'id')
            
$id $atributo->nodeValue;
        else if (
$atributo->nodeName == 'x')
            
$x $atributo->nodeValue;
        else if (
$atributo->nodeName == 'y')
            
$y $atributo->nodeValue;
    }

    if (
$id != 0)
        echo 
"  ID: $id\n";

    if (
$x != && $y != 0)
        echo 
"  Coordenadas: $x - $y\n";
}

?>
Si necesitas algo más concreto o algo en particular no te queda claro, cuéntanos y vemos cómo hacerlo más claro :).
  #3 (permalink)  
Antiguo 28/09/2007, 17:22
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: Leer xml con xpath

Ya lo consegui, mañana por la mañana lo posteo ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 07:35.