Accediendo a XML con XPath y PHP5

Bien, hasta ahora vimos como acceder al documento XML con PHP 5 accediendo a los nodos directamente e iterando colecciones.

Pero qué pasa si queremos acceder a un nodo en particular, sin tener que recorrer el documento.

Esto se puede hacer mediante XPath. XPath es un lenguaje de expresiones para acceder a partes de un documento XML. También permite hacer cálculos.

La base es considerar al documento como un arbol de directorios de unix donde cada nodo es un directorio. De esta manera si queremos acceder al título de un documento XHTML basta con consultar el elemento: “/html/head/title”. Si queremos acceder todas las entradas de un feed RSS. la consulta será a “entry”. Esto devolverá un array con todos los nodos de tipo entry donde cada elemento del array será un nodo.

También podemos acceder por los atributos. Supongamos que tenemos un documento XML en donde guardamos contactos. Cada nodo “contacto” tiene un atributo que se llama “tipo” y entre sus valores posibles están “Personales”, “Negocios”, etc. Si queremos listar todos los contactos de tipo “Personales”:

$xml = simplexml_load_file('contactos.xml');
$res = $xml->xpath("contacto[@tipo=Personales]");

foreach ($res as $contacto)
{
  //hacer algo con los contactos...
}

Es decir invocamos al método xpath de la clase SimpleXML pasándole por parámetro nuestra consulta XPath. Como queremos filtrar por atributos ponemos entre corchetes el atributo precedido por una @ e igualamos al valor que queremos filtrar. En el ej:[@tipo=Personales].

Esto es solo la punta del iceberg, ya que se pueden hacer cálculos, consultas complejas acceder a nodos relativos, por ejemplo, el nodo padre de los nodos que tengan cierto valor en cierto atributo.

Cualquier duda o comentario, pregunten. Saludos!

Etiquetas: , ,

3 comentarios to “Accediendo a XML con XPath y PHP5”

  1. alicia Says:

    Hola! estoy investigando formas de leeer y procesar archivos xml. Mi consulta es sobre como procesar un xml que representa un envio de novedades, que deben ser descargados en un modelo de tablas relacionales en mysql.. la estructura es basicamente:

    …datos id de envio

    —distitnos atributos de persona

    … atributos de actividad…

    … atributos de actividad…

    similar a transaccion anterior

    Existe manera de desglosar para cada transaccion, cada tipo dinformacion, para ser insertada en una base de datos?
    Te agradeceria si me tiras alguna linea… estoy programando todo como archivo plano, pero imagino que algo debe haber para esto no?
    Un abrazo.

  2. alicia Says:

    Hola! estoy investigando formas de leeer y procesar archivos xml. Mi consulta es sobre como procesar un xml que representa un envio de novedades, que deben ser descargados en un modelo de tablas relacionales en mysql.. la estructura es basicamente:
    \
    …datos id de envio
    \
    \
    \
    —distitnos atributos de persona
    \
    \

    … atributos de actividad…

    … atributos de actividad…

    similar a transaccion anterior

    Existe manera de desglosar para cada transaccion, cada tipo dinformacion, para ser insertada en una base de datos?
    Te agradeceria si me tiras alguna linea… estoy programando todo como archivo plano, pero imagino que algo debe haber para esto no?
    Un abrazo.

  3. alicia Says:

    Hola! estoy investigando formas de leeer y procesar archivos xml. Mi consulta es sobre como procesar un xml que representa un envio de novedades, que deben ser descargados en un modelo de tablas relacionales en mysql.. la estructura es basicamente:
    -ENVIO –
    …datos id de envio
    -TRANSACCIONES –
    -TRANSACCION –
    – DATOS_PERSONA
    —distitnos atributos de persona
    – / DATOS_PERSONA-
    – DATOS_ACTIVIDADES-
    – ACTIVIDAD-
    … atributos de actividad…
    – /ACTIVIDAD-
    – ACTIVIDAD-
    … atributos de actividad…
    – /ACTIVIDAD –

    – /DATOS_ACTIVIDADES-
    – /TRANSACCION-
    – TRANSACCION-
    similar a transaccion anterior
    – /TRANSACCION-
    – /TRANSACCIONES-
    – /ENVIO –
    Existe manera de desglosar para cada transaccion, cada tipo dinformacion, para ser insertada en una base de datos?
    Te agradeceria si me tiras alguna linea… estoy programando todo como archivo plano, pero imagino que algo debe haber para esto no?
    Un abrazo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: