Básicos para leer XML con R

Algunas funciones del package XML de R, que nos facilita el trabajo a la hora de extraer información de un fichero XML.

Cargar en memoria fichero xml

Si el valor de xmlMalaltia es este:

Operador [[]] para navegar por los hijos

Valor de un nodo, función xmlValue()

Valor de un atributo de un nodo, función xmlGetAttr()

Lista de atributos de un determinado nodo, función xmlAttrs()

XPath

Esto que hemos visto serían las funciones más básicas para obtener valores de un nodo dado. Pero lo más útil, por lo menos en mi caso, es el poder usar XPath para hacer búsquedas dentro del fichero XML y movernos hacia arriba o hacia abajo de un determinado nodo. Es una herramienta bastente potente y versátil.

Valor de un determinado hijo:

Este es un caso muy sencillo, en el que no tendría demasiado sentido el uso de xPath. Respecto la variable xmlMalaltia, se busca entre sus hijos el nodo

Todos los nodos con un determinado nombre:

Esto nos devolverá, del xml de la variable xmlDiseases, una lista con todos los nodos que tengan por nombre ‘Disorder’, esten en el nivel que esten.

Todos los nodos con un determinado nombre y un determinado atributo:

En este caso, queríamos el nombre (tag Name), tal que su padre (con tag Disorder) tiene un atributo id que tiene por valor 5441. getNodeSet, nos devolvería una lista. Como sabemos que nos devolverá solo un elemento, lo cogemos con el [[1]] del final. El parámetro fun, es la función que ejecutará para cada valor de la selección, y el valor que nos devolverá (tipo función apply de R).

Otro ejemplo similar al anterior, en el que sí nos interesa la lista de nodos xml, por lo que no ejecutamos xmlValue:

Todos los subnodos con un determinado Tag:

En este caso obtenemos todos los nodos con nombre Disorder, que esten por debajo del padre de xmlMalaltia.

Aquí vemos que los dos puntos (..) en el path, sirven para subir un nivel en la jerarquia del nodo actual (xmlMalaltia).

Vemos tambien el uso de expresiones xPath Axes, que nos devuelven nodos relacionados con nuestro nodo actual. En este caso, todos los descendentes  del nodo actual, mediante la palabra descendant. Tenemos otras palabras útiles de Axes como ancestor, child, etc.  (lista completa de xPath Axes en w3schools: http://www.w3schools.com/xpath/xpath_axes.asp).