Upload
others
View
42
Download
0
Embed Size (px)
Citation preview
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: 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
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 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
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)
< menor que
> 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 > 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 > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:when test="price > 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 > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:when test="price > 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 > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price > 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>