54
XSL EXtensible Stylesheet Language

XSL EXtensible Stylesheet Languagemtovar/doc/WSO/XML_XSL2.pdfXPath: Introducción • Es una sintaxis para definir partes de un documento XML • Usa expresiones de tipo PATH para

  • Upload
    others

  • View
    42

  • Download
    0

Embed Size (px)

Citation preview

XSL

EXtensible Stylesheet Language

XSL

• XSL es un lenguaje de hojas de estilo para documentos

XML.

• XSLT significa XSL Transformación.

• CSS = hojas de estilo para HTML

• XSL = hojas de estilo para XML

• XSL describe como los elementos XML deben mostrarse.

Introducción

XSL está compuesto de cuatro partes:

• XSLT: Un lenguaje para la transformación de documentos XML

• XPATH: Un lenguaje para navegar en documentos XML

• XSL-FO: Un lenguaje para formatear documentos XML (descontinuado en

2013)

• XQUERY: Un lenguaje para consultar documentos XML

XPath

XLink XQuery

XSLT

XP

ath

XPath: Introducción

• Es una sintaxis para definir partes de un documento XML

• Usa expresiones de tipo PATH para navegar en los documentos XML

• Contiene una biblioteca de aproximadamente 100 funciones estándar

• Fue diseñado para trabajar con XSLT, XPointer, XQuery, etc

• Es una recomendación de la W3C, desde Noviembre de 1999

Nodos, Valores atómicos y elementos

<profesores> - nodo elemento raíz

<profesor> - nodo elemento

extranjero=“no" - nodo atributo

Julio - Valor atómico

“no” - Valor atómico

<?xml version="1.0" encoding="ISO-8859-1"?> <profesores> <profesor> <nombre extranjero=“no">Julio</nombre> <apellidos>Arteaga Pinares</apellidos> <sexo>masculino</sexo> <edad>35</edad> </profesor> </profesores>

XPath: Nodos <?xml version="1.0" encoding="ISO-8859-1"?> <profesores> <profesor> <nombre extranjero=“no">Julio</nombre> <apellidos>Arteaga Pinares</apellidos> <sexo>masculino</sexo> <edad>35</edad> </profesor> </profesores>

profesores

profesor

nombre extranjero=“no”

apellidos sexo edad

profesor

nombre extranjero=“si”

Relaciones entre nodos

• Padre

• Hijos

• Hermanos

profesores

profesor

nombre extranjero=“no”

apellidos sexo edad

profesor

nombre extranjero=“si”

• Ancestros

• Descendientes

Expresiones de trayectoria (Path expressions) • nodename

– Selecciona todos los nodos hijo de este nodo

• / – Selecciona a partir de nodo raíz

• // – Selecciona nodos en el documento del nodo actual que empaten con la

seleccion y sin importar donde se encuentren

• . – Selecciona el nodo actual

• .. – Selecciona el padre del nodo actual

• @ – Selecciona los atributos

Ejemplos de selección de nodos

• Profesores – Selecciona todos los nodos hijo del elemento profesores

• /profesores – Selecciona el elemento raiz profesores

• profesores/profesor – Selecciona todos los elementos profesor que son hijos de profesores

• //profesor – Selecciona todos los elementos profesor sin importar en que parte del

documento se encuentren

• profesores//profesor – Selecciona todos los elementos profesor que sean descendientes del

elemento profesores, sin importar en que parte debajo de profesores estos se encuentren

• //@extranjero – Selecciona todos los atributos que tengan el nombre extranjero

Predicados de ejemplo • Usados para encontrar un nodo o un nodo que contiene un valor especifico.

• /profesores/profesor[1]

• Primer elemento profesor

• /profesores/profesor[last()]

• Selecciona el último elemento profesor que es hijo de profesores

• /profesores/profesor[last()-1]

• Selecciona el penultimo elemento que es hijo del elemento profesores

• /profesores/profesor[position()<3]

• Selecciona los primeros dos profesores que son hijos del elemento profesores

• //nombre[@extranjero]

• Todos los nombres que tengan el atributo extranjero

• //nombre[@extranjero=‘si']

• /profesores/profesor[edad>25]

• Selecciona todos los elementos profesor de profesores que tienen la edad mayor a

25

• /profesores/profesor[edad>25]/nombre

• Selecciona todos los elementos “nombre” de profesores que tienen la edad mayor a

35.

Comodines

• *

• Cualquier nodo elemento

• @*

• Cualquier nodo atributo

• node()

• Cualquier nodo de cualquier tipo

• /profesores/*

• //*

• Todos los elementos en el documento

• //nombre[@*]

• Selecciona todos los elementos nombre que tengan cualquier atributo

Múltiples trayectorias

• //profesor/nombre | //profesor/edad

• Selecciona todos los elementos nombre Y los elementos edad que

pertenezcan a los elementos profesor

• //nombre | //edad

• Todos los elementos nombre y edad del documento

• /profesores/profesor/nombre | //sexo

• Todos los elementos nombre que pertenezcan a los elementos profesor

que pertenezcan a los elementos profesores Y todos los elementos sexo

en el documento

Ejes Eje Resultado

ancestor Selecciona todos los ancestros (padre, abuelo, etc.) del

nodo actual.

ancestor-or-self Selecciona todos los ancestros (padre, abuelo, etc.) del

nodo actual y del nodo mismo.

attribute Selecciona todos los atributos del nodo actual

Child Selecciona todos los hijos del nodo actual

descendant Selecciona todos los descendientes (hijos, nietos, etc.)

del nodo actual.

Descendant-or-self Selecciona todos los descendientes (hijos, nietos, etc.)

del nodo actual y el nodo actual mismo

following Selecciona cualquier cosa en el documento después

del tag de cierre del nodo actual

Following-sibling Selecciona todos hermanos después del nodo actual.

namespace Selecciona todos los nodos namespace del nodo

actual

preceding Selecciona todos los nodos que aparecen antes del

nodo actual en el documento, excepto ancestros,

nodos atributos nodos namespace.

Preceding-sibling Selecciona todos los hermanos antes del nodo actual

self Selecciona el nodo actual

Ejes • ancestor

• ancestor-or-self

• attribute

• child

• descendant

• descendant-or-self

• following

• following-sibling

• namespace

• parent

• preceding

• preceding-sibling

• self

profesores

profesor

nombre extranjero=“no”

apellidos sexo edad

profesor

nombre extranjero=“si”

Ejes: Sintaxis (axisname::nodetest[predicate])

Ejemplo Resultado

child::profesor Selecciona todos los nodos profesor que son hijos del nodo

actual

attribute::extranjero Selecciona todos los atributos extranjero del nodo actual

child::* Selecciona todos elementos hijos del nodo actual

attribute::* Selecciona todos los atributos del nodo actual

child::text() Selecciona todos los nodos texto hijos del nodo actual

child::node() Selecciona todos los hijos del nodo actual

descendant::profesor Selecciona todos los descendientes de profesor del nodo

actual

ancestor::profesor Selecciona todos los ancestros de profesor del nodo actual

ancestor-or-self::profesor Selecciona todos los ancestros del nodo actual y el mismo

child::*/child::edad Selecciona todas las edades de los nietos del nodo actual

Xpath: Operadores

Ejemplo

<?xml version="1.0" encoding="ISO-8859-1"?>

<profesores>

<profesor categoria="Tiempo Completo">

<nombre extranjero="no">Julio</nombre>

<apellidos>Jaramillo Cortes</apellidos>

<sexo>masculino</sexo>

<edad>35</edad>

</profesor>

<profesor categoria="Tiempo Completo">

<nombre extranjero="no">Erica</nombre>

<apellidos>Manzanares</apellidos>

<sexo>femenino</sexo>

<edad>30</edad>

</profesor>

<profesor categoria="Medio Tiempo">

<nombre extranjero="si">Albert</nombre>

<apellidos>Warner</apellidos>

<sexo>masculino</sexo>

<edad>23</edad>

</profesor>

</profesores>

Como cargar el XPath?

var xmlhttp=new XMLHttpRequest()

O

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

xmlDoc.selectNodes(xpath);

O

xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null);

XSLT

XSLT

• XSLT es un lenguaje para transformar documentos XML a XHTML u otro tipo de documentos basados en XML.

• Se usa XPath para navegar en los documentos XML.

• XSLT es una recomendación del W3C desde el 16 de Noviembre de 1999

Conceptos Básicos

Se necesita conocer:

• HTML / XHTML

• XML / XML Namespaces

• XPath

XSLT

• Transformaciones XSL

• Es la parte más importante de XSL

• Transforma un documento XML a otro documento XML

• Usa XPath para navegar dentro de los documentos XML

• XSLT es una recomendación del W3C

XSLT = XSL Transformations

• Transforma documentos XML a otro tipo de documento que sea reconocido por un navegador, por ejemplo HTML o XHTML.

• Normalmente transforma cada elemento XML a un elemento (X)HTML.

• Es posible agregar o remover elementos o atributos de y hacia un archivo de salida. Se puede ordenar, hacer pruebas (tipo if), etc.

• XSLT transforma un árbol-fuente XML a un árbol-resultante XML.

XSLT y XPath

• XPath sirve para encontrar la información dentro de un documento XML, es decir, es posible navegar a través de los elementos y atributos de dicho documento.

• XSLT usa XPath para definir las partes del documento fuente que deben ajustarse a una o más plantillas definidas previamente.

• XSLT usa estas plantillas para transformar dichas partes en un documento resultante.

Soporte de XML y XSLT • Mozilla Firefox

• Firefox soporta XML, XSLT, y XPath desde la versión 3.

• Internet Explorer

• Internet Explorer soporta XML, XSLT, y XPath desde la versión 6.

• Internet Explorer 5 NO es compatible con la recomendación oficial W3C XSL.

• Google Chrome

• Chrome soporta XML, XSLT, y XPath desde la versión 1.

• Opera

• Opera soporta XML, XSLT, y XPath desde la versión 9. Opera 8 soporta solamente XML + CSS.

• Apple Safari

• Safari soporta XML y XSLT desde la versión 3.

XML -> XHTML usando XSLT • Se debe crear una hoja de estilo XSL.

• El elemento raíz puede ser cualquiera de los siguientes: • <xsl:stylesheet> o

• <xsl:transform>.

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

ó

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Nota: Para obtener acceso a los elementos, atributos y características XSLT, es necesario declarar el namespace XSLT en la parte superior del documento.

Ejemplo

Archivo XML

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> . . </catalog>

Archivo XSL

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:template> • Una hoja de estilo XSL esta compuesta de una o más reglas que son llamadas

plantillas.

• Una plantilla contiene las reglas que se aplicarán a un determinado nodo.

• El atributo match se usa para asociar la plantilla con el elemento XML.

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:value-of>

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:for-each> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd[artist='Bob Dylan']"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Operadores válidos:

= (igual)

!= (diferente)

&lt; menor que

&gt; mayor que

El elemento <xsl:sort> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:if>

<xsl:if test="expression"> ...some output if the expression is true... </xsl:if>

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price &gt; 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:choose>

<xsl:choose> <xsl:when test="expression"> ... some output ... </xsl:when>

<xsl:when test="expression"> ... some output ... </xsl:when> :

<xsl:otherwise> ... some output .... </xsl:otherwise> </xsl:choose>

El elemento <xsl:choose> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price &gt; 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:when test="price &gt; 9"> <td bgcolor="#cccccc"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

El elemento <xsl:choose> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price &gt; 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:when test="price &gt; 9"> <td bgcolor="#cccccc"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

<xsl:for-each select="catalog/cd">

<tr>

<td><xsl:value-of select="title"/></td>

<xsl:choose>

<xsl:when test="price &gt; 10">

<td bgcolor="#ff00ff">

<xsl:value-of select="artist"/></td>

</xsl:when>

<xsl:when test="price &gt; 9">

<td bgcolor="#cccccc">

<xsl:value-of select="artist"/></td>

</xsl:when>

<xsl:otherwise>

<td><xsl:value-of select="artist"/></td>

</xsl:otherwise>

</xsl:choose>

</tr>

</xsl:for-each>

Ejercicio

• Muestra los elementos restantes de CD.xml

• Construye un archivo xsl para la práctica de tus cd’s

favoritos.

• Ordena la información, elige alguno de tus elementos.

Ejercicio obtener

xsl

<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>

El elemento <xsl:apply-templates>

• El elemento <xsl: apply-templates> aplica una plantilla al

elemento actual o a nodos hijos del elemento actual.

Si añadimos un atributo “select” al elemento <xsl: apply-

templates> se procesará únicamente el elemento hijo o

secundario que coincida con el valor del atributo.

Podemos usar el atributo de selección para especificar el

orden en el que se procesan los nodos secundarios o

hijos.

El elemento <xsl:apply-templates>

•<?xml version="1.0" encoding="UTF-

8"?>

•<xsl:stylesheet version="1.0"

•xmlns:xsl="http://www.w3.org/1999/XSL/

Transform">

•<xsl:template match="/">

• <html>

• <body>

• <h2>My CD Collection</h2>

• <xsl:apply-templates/>

• </body>

• </html>

•</xsl:template>

<xsl:template match="cd">

• <p>

• <xsl:apply-templates select="title"/>

• <xsl:apply-templates select="artist"/>

• </p>

•</xsl:template>

•<xsl:template match="title">

• Title: <span style="color:#ff0000">

• <xsl:value-of select="."/></span>

• <br />

•</xsl:template>

•<xsl:template match="artist">

• Artist: <span style="color:#00ff00">

• <xsl:value-of select="."/></span>

• <br />

•</xsl:template>

•</xsl:stylesheet>

XSLT – Ejecución en el Cliente: Una

solución con JavaScript • XSLT se puede utilizar para transformar el documento a XHTML en el

navegador.

• No siempre es deseable incluir una referencia de hoja de estilo en un

archivo XML.

Una solución sería usar un programa JavaScript para hacer la

transformación.

Mediante el uso de JavaScript, podemos:

• Hacer la prueba específica en el navegador

• Utilizar diferentes hojas de estilo según las necesidades del usuario y del

navegador

• Uno de los objetivos del diseño de XSLT era hacer posible la

transformación de datos de un formato a otro, el apoyo a diferentes

navegadores y diferentes necesidades de los usuarios.

XSLT – Ejecución en el Cliente: Una

solución con JavaScript

<?xml version="1.0" encoding="UTF-

8"?>

<catalog>

<cd>

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>

<country>USA</country>

<company>Columbia</company>

<price>10.90</price>

<year>1985</year>

</cd>

.

.

</catalog>

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th style="text-align:left">Title</th> <th style="text-align:left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title" /></td> <td><xsl:value-of select="artist" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Transformando XML a XHTML en

el Navegador <html>

<head>

<script>

function loadXMLDoc(filename)

{

if (window.ActiveXObject)

{

xhttp = new ActiveXObject("Msxml2.XMLHTTP");

}

else

{

xhttp = new XMLHttpRequest();

}

xhttp.open("GET", filename, false);

try {xhttp.responseType = "msxml-document"} catch(err) {}

xhttp.send("");

return xhttp.responseXML;

}

</script>

</head>

<body onload="displayResult()">

<div id="example" />

</body>

</html>

function displayResult()

{

xml = loadXMLDoc("cdcatalog.xml");

xsl = loadXMLDoc("cdcatalog.xsl");

// code for IE

if (window.ActiveXObject || xhttp.responseType == "msxml-document")

{

ex = xml.transformNode(xsl);

document.getElementById("example").innerHTML = ex;

}

// code for Chrome, Firefox, Opera, etc.

else if (document.implementation &&

document.implementation.createDocument)

{

xsltProcessor = new XSLTProcessor();

xsltProcessor.importStylesheet(xsl);

resultDocument = xsltProcessor.transformToFragment(xml, document);

document.getElementById("example").appendChild(resultDocument);

}

}

programas/xsl_client.asp?filename=cdcatalog

Explicación

• La función loadXMLDoc() hace lo siguiente:

• Crea un objeto XMLHttpRequest

• Usa los métodos open() y send() de los objetos XMLHttpRequest para enviar una solicitud a un servidor

• Obtener la respuesta como datos XML

• La función displayResult() se usa para mostrar el archivo XML estilizado por el archivo XSL:

• Cargar los archivos XML y XSL

• Pobrar que tipo de browser tiene el usuario

• Internet Explorer

• Usa el método transformNode() para aplicar la hoja de estilo XSL al documento xml

• Asigna el cuerpo del documento actual (id="example") para que contenga el documento de estilo xml.

• Otros navegadores

• Crea un objeto nuevo XSLTProcessor e importa el archivo XSL

• Usa el método transformToFragment() para aplicar la hoja de estilo XSL al documento xml

• Asigna el cuerpo del documento actual (id="example") para que contenga el documento estilizado XML.

Transformando XML a XHTML en el

Server PHP <%

'Load XML file

set xml = Server.CreateObject("Microsoft.XMLDOM")

xml.async = false

xml.load(Server.MapPath("cdcatalog.xml"))

'Load XSL file

set xsl = Server.CreateObject("Microsoft.XMLDOM")

xsl.async = false

xsl.load(Server.MapPath("cdcatalog.xsl"))

'Transform file

Response.Write(xml.transformNode(xsl))

%>

import javax.xml.transform.ErrorListener;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamResult;

import javax.xml.transform.stream.StreamSource;

public class XSLTTest

{

public static void main(String[] args)

{

if (args.length != 3)

{

System.err.println("give command as follows : ");

System.err.println("XSLTTest data.xml converted.xsl converted.html");

return;

}

String dataXML = args[0];

String inputXSL = args[1];

String outputHTML = args[2];

XSLTTest st = new XSLTTest();

try

{

st.transform(dataXML, inputXSL, outputHTML);

XSLTTest.java

}

catch (TransformerConfigurationException e)

{

System.err.println("TransformerConfigurationException");

System.err.println(e);

}

catch (TransformerException e)

{

System.err.println("TransformerException");

System.err.println(e);

}

}

public void transform(String dataXML, String inputXSL, String outputHTML)

throws TransformerConfigurationException,

TransformerException

{

TransformerFactory factory = TransformerFactory.newInstance();

StreamSource xslStream = new StreamSource(inputXSL);

Transformer transformer = factory.newTransformer(xslStream);

StreamSource in = new StreamSource(dataXML);

StreamResult out = new StreamResult(outputHTML);

transformer.transform(in, out);

System.out.println("The generated HTML file is:" + outputHTML);

}

}

Ejemplo 1 hola.xml <?xml version="1.0"?> <greeting> Hello, World! </greeting>

hola.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <xsl:apply-templates select="greeting"/> </xsl:template> <xsl:template match="greeting"> <html> <body> <h1> <xsl:value-of select="."/> </h1> </body> </html> </xsl:template> </xsl:stylesheet>

hola.html <html> <body> <h1> Hello, World! </h1> </body> </html>

Ejemplo 2 ejemplo.xml <?xml version="1.0" encoding="UTF-8"?> <portfolio> <stock> <symbol>SUNW</symbol> <name> Sun Microsystems </name> <price>17.1</price> </stock> <stock> <symbol>AOL</symbol> <name>America Online</name> <price>51.05</price> </stock> <stock> <symbol>IBM</symbol> <name>International Business Machines</name> <price>116.10</price> </stock> <stock> <symbol>MOT</symbol> <name>MOTOROLA</name> <price>15.20</price> </stock> </portfolio>

stocks.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <body> <table border="2" width="50%"> <xsl:for-each select="portfolio/stock"> <tr> <td> <i><xsl:value-of select= "symbol"/></i> </td> <td> <xsl:value-of select="name"/> </td> <td> <xsl:value-of select="price"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Ejemplo 2 convertida2.html <html> <body> <table border="2" width="50%"> <tr> <td><i>SUNW</i></td><td> Sun Microsystems </td><td>17.1</td> </tr> <tr> <td><i>AOL</i></td><td>America Online</td><td>51.05</td> </tr> <tr> <td><i>IBM</i></td><td>International Business Machines</td><td>116.10</td> </tr> <tr> <td><i>MOT</i></td><td>MOTOROLA</td><td>15.20</td> </tr> </table> </body> </html>

Ejemplo 3 <?xml version="1.0" encoding="UTF-8"?> <languages-list> <language> <name>Kannada</name> <region>Karnataka</region> <users>38M</users> <family>Dravidian</family> </language> <language> <name>Telugu</name> <region>Andra Pradesh</region> <users>74M</users> <family>Dravidian</family> </language> <language> <name>Tamil</name> <region>TamilNadu</region> <users>61M</users> <family>Dravidian</family> </language>

<language> <name>Malayalam</name> <region>Kerela</region> <users>33M</users> <family>Dravidian</family> </language> <language> <name>Hindi</name> <region>Andaman and Nicobar Islands, North india, Parts of North east</region> <users>442M</users> <family>Indo Aryan</family> </language> <language> <name>Assamese</name> <region>Assam, Arunachal Pradesh</region> <users>13M</users> <family>Indo Aryan</family> </language> </languages-list>

Ejemplo 3

<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h1>Indian Languages details</h1> <table border="1"> <tr> <th>Language</th> <th>Family/Origin</th> <th>No. of speakers</th> <th>Region</th> </tr> <xsl:for-each select="languages-list/language"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="family"/></td> <td><xsl:value-of select="users"/></td> <td><xsl:value-of select="region"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Ejemplo 3 <html> <body> <h1>Indian Languages details</h1> <table border="1"> <tr> <th>Language</th><th>Family/Origin</th><th>No. of speakers</th><th>Region</th> </tr> <tr> <td>Kannada</td><td>Dravidian</td><td>38M</td><td>Karnataka</td> </tr> <tr> <td>Telugu</td><td>Dravidian</td><td>74M</td><td>Andra Pradesh</td> </tr> <tr> <td>Tamil</td><td>Dravidian</td><td>61M</td><td>TamilNadu</td> </tr> <tr> <td>Malayalam</td><td>Dravidian</td><td>33M</td><td>Kerela</td> </tr> <tr> <td>Hindi</td><td>Indo Aryan</td><td>442M</td><td>Andaman and Nicobar Islands, North india, Parts of North east</td> </tr> <tr> <td>Assamese</td><td>Indo Aryan</td><td>13M</td><td>Assam, Arunachal Pradesh</td> </tr> </table> </body> </html>