La librería XML permite parsear documentos XML, iterar por los elementos que los componen y aplicar transformaciones XSLT.

XPath
Para referenciar a partes concretas dentro de un documento XML se utiliza el estándar de rutas XPath.

Para poder hacer referencia a las variables de los distintos ámbitos que ofrece una aplicación web dentro de una expresión XPath se utiliza $<variable>, $param:, $header:, $cookie:, $initParam:, $pageScope:, $requestScope:, $sessionScope: y $applicationScope:.

$applicationScope:libros/libro[1]

La expresión de ejemplo anterior hace referencia a un nodo XML almacenado en la variable de aplicación libros, y sobre la que se aplica la ruta XPath libros/libro[1]:

Acciones
De forma general las acciones para las que no se especifica una variable donde almacenar el resultado lo añaden a la respuesta de la petición en curso a través del Writer.

x:parse: Parsea un documento XML indicado en un atributo o en el cuerpo de la acción. El resultado del proceso se puede indicar que se devuelva en un atributo varDom o var. Cuando se utiliza el primero el resultado es de tipo org.w3c.dom.Document, mientras que el segundo depende de la implementación del parser utilizado.

<c:import url="agenda.xml" var="xml"/>

<x:parse doc="${xml}" var="agenda"/>

x:out: Admite una expresión XPath, la evalúa, y añade el resultado a la respuesta de la petición en curso.

<x:out select="$agenda/contactos" escapeXml="true"/>

x:set: Admite una expresión XPath, la evalúa, y devuelve el resultado en una variable.

<x:set select="$agenda/contactos/contacto[1]" var="contacto"/>

x:if: Admite una condición sobre una expresión XPath, la evalúa, y comprueba si la condición se cumple.

<x:if select="$contacto/ciudad='Paris'">
  Parisino
</x:if>

x:choose: Admite un conjunto de condiciones sobre expresiones XPath en su cuerpo, las evalúa, y procesa el cuerpo de la condición que se cumple, o una por defecto si existe.

<x:choose>
  <x:when select="$contacto/ciudad='Paris'">
    Parisino
  </x:when>
  <x:when select="$contacto/ciudad='Madrid'">
    Madrileño
  </x:when>
  <x:otherwise>
    Desconocido
  </x:otherwise>
</x:choose>

x:forEach: Itera por los elementos devueltos por la evaluación de una expresión XPath dada. Su funcionamiento es similar a la acción if de la librería core, admite unos atributos similares para controlar la iteración y el nodo en curso.

<table>
  <x:forEach select="$agenda/contactos/contacto" var="contacto">
    <tr><td><x:out select="$contacto/nombre"/></td></tr>
  </x:forEach>
</table>

x:transform: Permite aplicar una plantilla de transformación sobre un documento XML. Esta acción admite bastantes parámetros y es recomendable leer la documentación de referencia para sacar un mayor provecho de la misma.

<c:import url="documento.xml” var="doc"/>
<c:import url="plantilla.xsl" var="xslt"/>

<x:transform doc="${doc}" xslt="${xslt}"/>