Existe una aplicación llamada
que permite hacer consultas XPath a archivos XML.
Supongamos el siguiente archivo XML, al cual llamaremos libro.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <xml version="1.0" encoding="UTF-8">
<libro>
<titulo>Patas arriba<titulo>
<autor>Eduardo Galeano</autor>
<capitulo num="1" titulo="La escuela del mundo al revés">
<seccion num="1" titulo="Educando con el ejemplo">
<parrafo destacado="si">La escuela del mundo al revés es la más democrática de las instituciones educativas.</parrafo>
<parrafo>El mundo al revés premia al revés.</parrafo>
</seccion>
<seccion num="2" titulo="Los alumnos">
<parrafo destacado="si">Día tras día, se niega a los niños el derecho de ser niños.</parrafo>
<parrafo>En el océano del desamparo, se alzan las islas del privilegio.</parrafo>
</seccion>
</capitulo>
<capitulo num="2" titulo="Cátedras del miedo">
<seccion num="1" titulo="La enseñanza del miedo">
<parrafo destacado="si">En un mundo que prefiere la seguridad a la justicia, hay cada vez más gente que aplaude el sacrificio de la justicia en los altares de la seguridad.</parrafo>
<parrafo>A mediados de 1982, ocurrió en Río de Janeiro un hecho de rutina: la policía mató a un sospechoso de hurto.</parrafo>
</seccion>
<seccion num="2" titulo="La industria del miedo">
<parrafo destacado="si">El miedo es la materia prima de las prósperas industrias de la seguridad privada y del control social.</parrafo>
<parrafo>"Nuestra mejor publicidad son los noticieros de la televisión", dice, y bien sabe lo que dice, uno de los especialistas en la venta de seguridad.</parrafo>
</seccion>
</capitulo>
</libro> |
Consultas
Obtener el título del libro:
xmlstarlet select -t -v //titulo libro.xml
Obtener el capítulo 1:
xmlstarlet select -t -v "//capitulo[@num='1']" libro.xml
Obtener el capítulo 2:
xmlstarlet select -t -v "//capitulo[2]" libro.xml
Obtener el capítulo 2 usando last():
xmlstarlet select -t -v "//capitulo[last()]" libro.xml
Obtener la sección 1 del capítulo 2:
xmlstarlet select -t -v "/libro/capitulo[@num='2']/seccion[@num='1']" libro.xml
Obtener los párrafos que contienen algún atributo:
xmlstarlet select -t -c '//parrafo[@*]' libro.xml
Obtener los párrafos no destacados del capítulo 1:
xmlstarlet select -t -c "/libro/capitulo[@num='1']//parrafo[not(@destacado)]" libro.xml
Parámetros
Syntax for templates: -t|--template <options>
where <options>
-c or --copy-of <xpath> - print copy of XPATH expression
-v or --value-of <xpath> - print value of XPATH expression
-o or --output <string> - output string literal
-n or --nl - print new line
-f or --inp-name - print input file name (or URL)
-m or --match <xpath> - match XPATH expression
-i or --if <test-xpath> - check condition <xsl:if test="test-xpath">
-e or --elem <name> - print out element <xsl:element name="name">
-a or --attr <name> - add attribute <xsl:attribute name="name">
-b or --break - break nesting</xsl:attribute></name></xsl:element></name></xsl:if></test-xpath></xpath></string></xpath></xpath></options></options>
Sitio oficial: XMLStarlet Command Line XML Toolkit
Tags: bash, w3c, xml