Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NET
XSLT.NET
XSLT en .NET.
XSLT (XSL Transformations) es una especificacin del W3C (Worl Wide Web
Consortium). Actualmente se est trabajando en la versin 2.0, siendo las anteriores la
1.0, www.w3.org/tr/xslt y la 1.1, www.w3.org/tr/xslt11.
XSLT est diseado para ser utilizado como parte de XSL. Se puede decir que XSL
especifica el estilo de un documento XML utilizando XSLT para describir cmo el
documento es transformado en otro documento XML que utilice el vocabulario XSL de
formato.
La idea es muy sencilla. A partir del documento XML a transformar y formatear, se crea
su rbol de nodos -rbol fuente-. El parser XSLT, basndose en una pgina XSL -en su
parte XSLT-, transforma el rbol fuente, obteniendo el rbol resultado, en cuyos nodos
1/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
se guardan los elementos de formateo. Una vez se dispone del rbol resultado se le
aplica el parser XSL -que puede venir implementado con el parser XSLT-, el cual se
puede basar en la parte XSL de la misma pgina en la que se ha basado el parser XSLT,
obteniendo el documento resultado en el formato deseado.
Por otro lado, se ha comentado que XSLT utiliza XPath para navegar por un documento
XML. En el Framework .NET la implementacin de XPath se hace mediante la clase
XPathNavigator y la interfaz IPathNavigable. La interfaz IPathNavigable es
implementada por las clases XmlDocument, XmlDataDocument y XPathDocument y
ofrece un mtodo CreateNavigator que devuelve un objeto XPathNavigator
mediante el cual se puede navegar por el documento asociado.
2/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Como puede verse, los pasos bsicos para aplicar una transformacin a un documento
XML son:
XPath.
El cometido principal de XPath es acelerar las iteraciones y selecciones que se realicen
sobre un documento XML. Como se ha comentado, XPath es utilizado desde XSLT
para mejorar la eficiencia de la transformacin de un documento XML. No obstante
puede utilizarse independientemente.
3/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Por ejemplo:
A pesar de que XPath es generalmente utilizado desde XSLT, tambin puede utilizarse
independientemente. En tal caso ofrece la ventaja de poder seleccionar, recorrer y
realizar rpidamente operaciones sobre nodos.
using System.Xml.XPath;
4/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
5/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Figura 26.3. Recorrido XPath del documento libros.xml. Se realiza una consulta
XPath y una operacin.
XSLT.
En el Framework .NET, el namespace System.Xml.Xsl es el que contiene las clases e
interfaces que dan soporte a las transformaciones XSL (XSL Transforms).
xmlns:xsl= http://www.w3.org/1999/XSL/Transform
- Load : carga una hoja de estilos XSLT, incluyendo cualquier referencia de tipo
xsl:import y xsl:include que contenga. Este mtodo est sobrecargado, en
su versin ms sencilla basta con pasarle un string con la URL de la hoja de
estilos. No obstante, admite cargar la hoja de estilos a partir de un XmlReader,
XPathNavigator o IXPathNavigable.
Por ejemplo:
6/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
transxslt.Load(..//..//libros.xsl);
Existe otra variante que slo recibe dos parmetros, pudiendo ser el primero de
tipo IPathNavigator o XPathNavigator y siendo el segundo de tipo
XsltArgumentList. Esta variante devuelve como resultado un objeto de tipo
XmlReader, que permite leer la salida de la transformacin.
Por ltimo, existe un mtodo que recibe dos argumentos de tipo string, el
primero representa el fichero XML de entrada y el segundo el fichero de salida.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
7/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Obsrve que no se acentan las palabras. El motivo es que es muy posible que, si se
utilizan tildes, se produzcan errores en el proceso de transformacin.
8/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Esta primera transformacin enva el resultado al flujo (stream) escritor, que est
asociado al fichero librosxslresul.html.
9/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
10/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Scripts XSLT.
La clase XslTransform soporta que las hojas de estilos XSLT incluyan scripts. Los
scripts deben incluirse mediante el elemento <msxsl:script>. El lenguaje del script
puede ser JavaScript, JScript, C# o VB y ha de indicarse en el elemento
<msxsl:script> a travs del atributo language.
System.Xml.XPath.XPathNavigator,
11/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
- System
- System.Collection
- System.Text
- System.Xml
- System.Xml.Xsl
- System.Xml.XPath
El tipo de los argumentos y valores de retorno de las funciones del script debe ser uno
de los definidos por el W3C para XPath. A continuacin se indican tales tipos y su
correspondiente en el soporte que ofrece .NET a XPath.
Cuando se carga una hoja de estilos con scripts, se crea una clase envoltorio
(wrapper) que contiene las funciones del script (su nombre se obtiene del atributo
implements-prefix).
- MostrarCabeceraLibro
- MostrarPieLibro
12/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ejemploxslt="http://pandasoftware.es/xslt">
string MostrarCabeceraLibro()
{
return "***Datos del libro***";
}
string MostrarPieLibro()
{
return "---Fin de datos del libro---";
}
</msxsl:script>
13/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
<br></br>
ISBN:
<xsl:value-of select="@ISBN" />
<br></br>
Titulo:
<xsl:value-of select="titulo" />
<br></br>
Precio:
<xsl:value-of select="precio" />
<br></br>
<xsl:value-of select="ejemploxslt:MostrarPieLibro()"/>
<br></br>
<text></text>
</xsl:template>
</xsl:stylesheet>
El cdigo del mtodo de respuesta al evento Click sobre el botn XSLT Scripts es
prcticamente igual al del ejemplo anterior para el botn XSLT.
14/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
15/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
XsltArgumentList.
Los objetos de esta clase pueden contener parmetros XSLT o bien objetos de extensin
XSLT. Cuando son pasados al mtodo Transform, estos parmetros y objetos de
extensin pueden ser utilizados desde las hojas de estilo.
16/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
Es mejor pasar objetos a las hojas de estilo utilizando XsltArgumentList que utilizar
scripts incrustados en las hojas de estilo. Las ventajas ms importantes son:
Parmetros XSLT.
Los parmetros XSLT son objetos que se pueden aadir a la lista de argumentos
XsltArgumentList utilizando el mtodo AddParam. Los parmetros han de tener un
nombre y una URI de namespace asociados, adems su tipo ha de corresponder con un
tipo definido en el estndar XPath del W3C.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Parmetro que se recibir de la invocacin al mtodo Transform -
->
<xsl:param name="CabeceraLibro"/>
<!-- Esta primera parte define la estructura del documento
transformado -->
<!-- La lnea siguiente busca el nodo raz del documento -->
<xsl:template match="/">
<!--Lo que sigue, hasta el siguiente comentario, aparecer
literalmente-->
<html>
<head>
<title>Prueba xsl</title>
</head>
<body>
<!-- La lnea siguiente pide que se apliquen las
plantillas -->
<!-- Las plantillas que se indican mas abajo son las
que se aplican -->
<!-- Se comienza por el elemento mas cercano a la
raz, que es-->
17/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
<!--biblioteca-->
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:param name="CabeceraLibro"/>
Esta lnea indica que la hoja de estilos recibir un parmetro al ser utilizada y que se
llama CabeceraLibro.
<xsl:value-of select="$CabeceraLibro"/>
Al procesar la hoja de estilos, esta lnea ser sustituida por el valor del parmetro
CabeceraLibro.
El cdigo del mtodo manejador del evento Click sobre el botn XSLTArgument
(button3_Click) es:
18/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
En este cdigo, similar al de los otros dos botones del ejemplo, cabe destacar las lneas
en negrita:
19/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
La tercera lnea:
argsxslt.AddParam("CabeceraLibro","EjemploXSLTArgs",textoCabecera);
20/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
21/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:MiObjFormateo="urn:FormateoLibros">
<!-- Parmetro que se recibir de la invocacin al mtodo Transform -
->
<xsl:param name="CabeceraLibro"/>
<!-- Esta primera parte define la estructura del documento
transformado -->
<!-- La lnea siguiente busca el nodo raz del documento -->
<xsl:template match="/">
22/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
xmlns:MiObjFormateo="urn:FormateoLibros">
<xsl:value-of select="MiObjFormateo:MostrarPieLibro()"/>
23/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
"MiObjFormateo:MostrarPieLibro()"
equivale a
objfor.MostrarPieLibro()
Y, si se observa el fichero librosxsltarg.html se ver que los pies de los libros han
sido incluidos.
24/25
Marco Besteiro y Miguel Rodrguez XSLT.NET
25/25