domingo, 12 de junio de 2016

Receta C# No. 6-12: Transformación de un Documento XML con XSLT

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 XSLT
5.2 Clase XslCompiledTransform
6. Práctica: Transformación de XML a HTML
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Un documento XML puede ser representado en otro lenguaje de marcado distinto, o ser organizado en una estructura diferente con un subconjunto de los datos contenidos en el documento original. .NET Framework provee al programador la clase XlsCompiledTransform para llevar a cabo este tipo de transformación sobre un documento de marcado extensible a otro formato estándar. En esta receta el programador explora cuál es el proceso requerido para crear una hoja de estilo XSLT para crear la representación en HTML del documento XML Ordenes.xml.

2. Palabras Clave

  • .NET
  • Hoja de estilo
  • HTML
  • Transformación
  • XHTML
  • XSLT

3. Problema

Convertir a HTML un documento XML usando una hoja de estilos definida en XSLT.

4. Solución

En el assembly System.Xml.Xsl se haya disponible la clase XslCompiledTransform para la transformación de datos de un documento XML por medio de una hoja de estilos XSLT.

5. Discusión de la Solución

5.1 XSLT

XLST son las siglas de eXtensible Language Stylesheet Transformations. Este lenguaje permite la transformación y representación de un documento XML a otra representación a través de diferentes transformaciones declarativas; el destino puede inclusive ser otro documento XML, un archivo de texto plano, un página Web HTML o XHTML, o cualquier otro formato de destino útil para el contexto de aplicación en donde se requiere este cambio de representación. XLST es una de las recomendaciones de W3C desde 1999 ("Transformación y Representación de Datos", 2016).

En la Figura 1 se describe gráficamente el flujo de una transformación usando el lenguaje XSLT.
Flujo de transformación con XSLT
Figura 1. Flujo de transformación con XSLT ("Transformación y Representación de Datos", 2016).

(Nota: En XML con C# (C1A5): Transformación y Representación de Datos se puede encontrar una explicación más detallada sobre este proceso de transformación y representación de datos.)

5.2 Clase XslCompiledTransform

La clase XslCompiledTransform (namespace System.Xml.Xsl) representa un procesador de XSLT para la transformación de datos en XML a través de una hoja de estilo especificada en este lenguaje. Este procesador soporta sintaxis de la versión 1.0 de XSLT ("XslCompiledTransform Class", 2016).

En esencia, los métodos disponibles en esta clase que se encargan de la carga y transformación son Load -toma una hoja de estilos- y Transform -transforma un documento XML otro distinto formato-, respectivamente.

6. Práctica: Transformación de XML a HTML

En este ejemplo práctico se recurre al uso del documento el XML Ordenes.xml como fuente de transformación a un documento Web HTML.



Ahora, para realizar la transformación al formato de etiquetado de HTML se especifica una hoja de estilo XSLT.

Archivo XSLT Ordenes.xslt [Enlace alternativo]: 

La descripción para la transformación se realiza a través de plantillas -elementos template-. Cada una de estas plantillas describe un conjunto de elementos del documento XML original. Los datos son extraídos a través de expresiones del lenguaje XPath (Receta C# No. 6-6: Cómo Usar XPath para Encontrar Elementos).


Para el documento XML Ordenes.xml las siguientes plantillas son definidas:
  • Líneas 5-13: Con esta plantilla se define cómo se trata el elemento Orden. De aquí se obtiene el id del cliente por medio de la expresión <xsl:value-of select="Cliente/@id"/>. Con <xsl:apply-templates select="Items/Item"/> se hace referencia a la plantilla que extrae los datos de cada ítem de la orden.
  • Líneas 15-21: Con las etiquetas xsl se obtiene a través de expresiones XPath los valores de cada uno de los ítems de de la etiqueta Items del documento XML.
Con la siguiente aplicación basada en consola se genera la salida en HTML a partir de la transformación especificada:

Compilación: 

csc /t:exe XsltOrdenes.cs

Ejecución assembly

.\XsltOrdenes.exe


Una vez ejecutado el assembly, el archivo Ordenes.html es generado.

Archivo HTML Ordenes.html [Enlace alternativo][Enlace alternativo]:


Este último archivo se ve así en el navegador: https://output.jsbin.com/ralogu 
Visualización archivo Ordenes.html
Figura 2. Visualización archivo Ordenes.html.

7. Conclusiones

Se ha ensañado cómo a través de la clase XslCompiledTransformed el programador de C# puede transformar un documento XML a HTML usando una especificación con XSLT. Esto ayuda a crear distintas representaciones de datos y estructura según los requerimientos de una aplicaciòn.

En la próxima receta C# se usa LINQ para cargar un documento XML.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
Receta C# No. 6-6: Cómo Usar XPath para Encontrar Elementos (2016, junio 12). Recuperado desde: http://ortizol.blogspot.com.co/2016/03/receta-csharp-no-6-6-como-usar-xpath-para-encontrar-elementos.html
XML con C# (C1A5): Transformación y Representación de Datos (2016, junio 12). Recuperado desde: http://ortizol.blogspot.com.co/2014/09/xml-con-csharp-c1a5-transformacion-y-representacion-de-datos-xlst.html


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.