Tema 6:
Tema 6:
Tema 6:
Tema 6:
Transformación de
Transformación de
Transformación de
Transformación de
documentos XML con XSLT
documentos XML con XSLT
documentos XML con XSLT
documentos XML con XSLT
Ricardo Eíto Brun
Ricardo Eíto Brun
Ricardo Eíto Brun
Ricardo Eíto Brun
Sevilla, 23
Sevilla, 23
Sevilla,
G
G
uíon del tema
uíon del tema
G
G
uíon del tema
uíon del tema
NNNN
ecesidad de la
ecesidad de la
ecesidad de la
ecesidad de la
transformación
transformación
transformación
transformación
Hojas de estilo
Hojas de estilo
Hojas de estilo
Hojas de estilo
para la
para la
para la
para la
transformación
transformación
transformación
transformación
Estructura y
Estructura y
Estructura y
Estructura y
sintáxis XSLT
sintáxis XSLT
sintáxis XSLT
sintáxis XSLT
Selectores XSLT
Selectores XSLT
Selectores XSLT
Selectores XSLT
Transformar
Transformar
documentos XML
documentos XML
con XML-Spy
con XML-Spy
Prácticas con XML y
Prácticas con XML y
HTML
G
G
uíon del tema
uíon del tema
G
G
uíon del tema
uíon del tema
NNNN
ecesidad de la
ecesidad de la
ecesidad de la
ecesidad de la
transformación
transformación
transformación
transformación
Hojas de estilo
Hojas de estilo
Hojas de estilo
Hojas de estilo
para la
para la
para la
para la
transformación
transformación
transformación
transformación
Estructura y
Estructura y
Estructura y
Estructura y
sintáxis XSLT
sintáxis XSLT
sintáxis XSLT
sintáxis XSLT
Selectores XSLT
Selectores XSLT
Selectores XSLT
Selectores XSLT
Transformar
Transformar
documentos XML
documentos XML
con XML-Spy
con XML-Spy
Prácticas con XML y
Prácticas con XML y
HTML
N
N
ecesidad de las transformaciones
ecesidad de las transformaciones
N
N
ecesidad de las transformaciones
ecesidad de las transformaciones
XML se presenta como un estándar para
XML se presenta como un estándar para
XML se presenta como un estándar para
XML se presenta como un estándar para
³transmi
³transmi
tir´ datos a tra
tir´ datos a tra
vés de Internet
vés de Internet
³transmi
³transmi
tir´ datos a tra
tir´ datos a tra
vés de Internet
vés de Internet
Ante la posibilidad de que distintos ³centros´ o
Ante la posibilidad de que distintos ³centros´ o
Ante la posibilidad de que distintos ³centros´ o
Ante la posibilidad de que distintos ³centros´ o
³apli
³apli
caciones´ util
caciones´ util
icen esquemas o DTD
icen esquemas o DTD
³apli
³apli
caciones´ util
caciones´ util
icen esquemas o DTD
icen esquemas o DTD
diferent
diferent
es, es
es, es
necesario un sistema que
necesario un sistema que
permita
permita
diferent
diferent
es, es
es, es
necesario un sistema que
necesario un sistema que
permita
permita
³transform
³transform
ar´ los dat
ar´ los dat
os de un documento XML
os de un documento XML
³transform
³transform
ar´ los dat
ar´ los dat
os de un documento XML
os de un documento XML
XSLT (eXtensible Stylesheet Language
XSLT (eXtensible Stylesheet Language
XSLT (eXtensible Stylesheet Language ±
XSLT (eXtensible Stylesheet Language ±
±
±
Transformations), describe un lenguaje basado
Transformations), describe un lenguaje basado
Transformations), describe un lenguaje basado
Transformations), describe un lenguaje basado
en XML para transformar documentos XML a
en XML para transformar documentos XML a
en XML para transformar documentos XML a
en XML para transformar documentos XML a
cualquier otro formato
cualquier otro formato
cualquier otro formato
A
A
plicación de las transformaciones
plicación de las transformaciones
A
A
plicación de las transformaciones
plicación de las transformaciones
NNNN
ormalmente, utilizaremos XSLT para
ormalmente, utilizaremos XSLT para
ormalmente, utilizaremos XSLT para
ormalmente, utilizaremos XSLT para
transforma
transforma
r documentos
r documentos
entre esquemas XML
entre esquemas XML
transforma
transforma
r documentos
r documentos
entre esquemas XML
entre esquemas XML
que permitan su procesamiento por distintos
que permitan su procesamiento por distintos
que permitan su procesamiento por distintos
que permitan su procesamiento por distintos
sistemas
sistemas
sistemas
sistemas
También utilizaremos XSLT para transformar
También utilizaremos XSLT para transformar
También utilizaremos XSLT para transformar
También utilizaremos XSLT para transformar
documentos XML en HTML, WML, o cualquier otro
documentos XML en HTML, WML, o cualquier otro
documentos XML en HTML, WML, o cualquier otro
documentos XML en HTML, WML, o cualquier otro
formato que facilite su presentación en la
formato que facilite su presentación en la
formato que facilite su presentación en la
formato que facilite su presentación en la
pantalla de un ordenador o en impresora
pantalla de un ordenador o en impresora
pantalla de un ordenador o en impresora
pantalla de un ordenador o en impresora
La transformación de XML a HTML es el principal
La transformación de XML a HTML es el principal
La transformación de XML a HTML es el principal
La transformación de XML a HTML es el principal
uso que se hace de XSLT
uso que se hace de XSLT
uso que se hace de XSLT
A
A
plicación de las transformaciones
plicación de las transformaciones
A
A
plicación de las transformaciones
plicación de las transformaciones
NNNN
o debemos confundir las transformaciones XSLT
o debemos confundir las transformaciones XSLT
o debemos confundir las transformaciones XSLT
o debemos confundir las transformaciones XSLT
con la presentación de documentos XML con CSS
con la presentación de documentos XML con CSS
con la presentación de documentos XML con CSS
con la presentación de documentos XML con CSS
Con XSLT, generaremos un documento HTML a
Con XSLT, generaremos un documento HTML a
Con XSLT, generaremos un documento HTML a
Con XSLT, generaremos un documento HTML a
partir de un documento XML. Se tratará de dos
partir de un documento XML. Se tratará de dos
partir de un documento XML. Se tratará de dos
partir de un documento XML. Se tratará de dos
documentos ³distintos´
documentos ³distintos´
documentos ³distintos´
documentos ³distintos´
Con CSS, el navegador recibe un documento XML
Con CSS, el navegador recibe un documento XML
Con CSS, el navegador recibe un documento XML
Con CSS, el navegador recibe un documento XML
que formatea utilizando las reglas CSS para
que formatea utilizando las reglas CSS para
que formatea utilizando las reglas CSS para
que formatea utilizando las reglas CSS para
presentarlo en pantalla de forma que sea más
presentarlo en pantalla de forma que sea más
presentarlo en pantalla de forma que sea más
presentarlo en pantalla de forma que sea más
fácilmente legible, pero es el mismo documento
fácilmente legible, pero es el mismo documento
fácilmente legible, pero es el mismo documento
XSLT, XSL, XSL FO...
XSLT, XSL, XSL FO...
XSLT es parte de la especificación XSL (eXtensibleXSLT es parte de la especificación XSL (eXtensible
Stylesheet Language). Stylesheet Language).
En XSL se distingue entre:En XSL se distingue entre:
XSL FO (eXtensible Stylesheet Language Formatting Objects)XSL FO (eXtensible Stylesheet Language Formatting Objects)
XSLT (eXtensible StyleSheet Language Transformations),XSLT (eXtensible StyleSheet Language Transformations), estable desde noviembre de 1999
estable desde noviembre de 1999
XSL FO cuenta con escaso soporte por parte de la industriaXSL FO cuenta con escaso soporte por parte de la industria
debido a su complejidad. debido a su complejidad.
Su propósito es definir la forma en la que se debe presentarSu propósito es definir la forma en la que se debe presentar
un documento XML en papel o en pantalla. un documento XML en papel o en pantalla.
En este sentido, XSL FO sería una especificación similar aEn este sentido, XSL FO sería una especificación similar a
CSS. CSS.
XSLT, XSL, XSL FO...
XSLT, XSL, XSL FO...
Actualmente contamos con varias herramietas
Actualmente contamos con varias herramietas
para realizar transformaciones XSLT:
para realizar transformaciones XSLT:
Saxon, desarrollado en Java por Michael Kay (un gurúSaxon, desarrollado en Java por Michael Kay (un gurú de XSLT)
de XSLT)
xt, diseñado por James Clarkxt, diseñado por James Clark
E
structura de una hoja de estilo XSLT
E
structura de una hoja de estilo XSLT
UU
na
na hoja
hoja de
de estilo
estilo XSLT
XSLT es
es un
un documento
documento XML
XML..
Debe
Debe estar
estar bien
bien formado
formado..
Las
Las hojas
hojas de
de estilo
estilo se
se guardarán
guardarán siempre
siempre en
en
archivos
archivos independientes
independientes con
con extensión
extensión ..xsl
xsl
Deben
Deben comenzar
comenzar con
con una
una declaración
declaración XML
XML::
<?xml
<?xml version="version="11..00³?> ³?>
El
El elemento
elemento raíz
raíz de
de la
la hoja
hoja de
de estilo
estilo XSLT
XSLT es
es
stylsheet
stylsheet..
Este
Este elemento
elemento contendrá
contendrá a
a todos
todos los
los demás,
demás, y
y
debe
debe ir
ir precedido
precedido por
por el
el alias
alias xsl
xsl correspondiente
correspondiente
al
E
structura de una hoja de estilo XSLT
E
structura de una hoja de estilo XSLT
En
En las
las hojas
hojas de
de estilo
estilo XSLT,
XSLT, los
los nombres
nombres de
de los
los
elementos
elementos ³reservados´
³reservados´ por
por la
la especificación,
especificación,
proceden
proceden de
de un
un mismo
mismo espacio
espacio de
de nombres,
nombres, y
y
por
por lo
lo tanto
tanto deben
deben escribirse
escribirse precedidos
precedidos por
por el
el
correspondiente
correspondiente alias
alias..
El
El alias
alias debe
debe ³apuntar´
³apuntar´ a
a la
la
UURL
RL::
httphttp:://www //www..ww33..org/org/19991999/XSL/Transform /XSL/Transform
De
De esta
esta forma,
forma, el
el elemento
elemento raíz
raíz quedará
quedará así
así::
<xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... ... </xsl:stylesheet> </xsl:stylesheet>
E
structura de una hoja de estilo XSLT
E
structura de una hoja de estilo XSLT
Entras las marcas de inicio y de fin del elemento
Entras las marcas de inicio y de fin del elemento
raíz xsl:stylesheet, se escribirán las reglas de
raíz xsl:stylesheet, se escribirán las reglas de
transformación propiamente dichas
transformación propiamente dichas
Cada regla se definirá mediante un elemento
Cada regla se definirá mediante un elemento
xsl:template
xsl:template
La regla indica qué instancias de los elementos
La regla indica qué instancias de los elementos
del documento XML se van a transformar.
del documento XML se van a transformar.
La regla también indicará cómo se deben
La regla también indicará cómo se deben
transformar cada una de ellas
transformar cada una de ellas
E
structura de una hoja de estilo XSLT
E
structura de una hoja de estilo XSLT
EJEMPLO EJEMPLO:: <xsl:template match=´//nombre´> <xsl:template match=´//nombre´> <h2> <h2> <xsl:value
<xsl:value--of select=´.´ />of select=´.´ /> </h2>
</h2>
</xsl:template> </xsl:template>
La regla se aplicará a todas las instancias del elemento nombre.La regla se aplicará a todas las instancias del elemento nombre.
Esto se indica mediante el atributo
Esto se indica mediante el atributo matchmatch que acompaña alque acompaña al elemento
elemento xsl:templatexsl:template..
Entre las etiquetas de inicio y de fin del elementoEntre las etiquetas de inicio y de fin del elemento xsl:templatexsl:template
se escribe la transformación que se debe realizar... se escribe la transformación que se debe realizar...
es decir,es decir, qué texto y qué marcas se escribirán en elqué texto y qué marcas se escribirán en el
documento resultado de la transformación
documento resultado de la transformación, cada vez que se, cada vez que se encuentre una instancia del elemento
encuentre una instancia del elemento nombrenombre en el documentoen el documento origen.
origen.
Con <Con <xsl:valuexsl:value--of...>of...>, se recupera y escribe en el documento, se recupera y escribe en el documento
resultado el valor del elemento que está siendo procesado. resultado el valor del elemento que está siendo procesado.
E
jemplo transformación XSLT
E
jemplo transformación XSLT
<?xml version=³1.0´?> <?xml version=³1.0´?> <ciudades> <ciudades> <ciudad> <ciudad> <nombre>Madrid</nombre> <nombre>Madrid</nombre> <habitantes>3500000</habitantes> <habitantes>3500000</habitantes> </ciudad> </ciudad> <ciudad> <ciudad> <nombre>Málaga</nombre> <nombre>Málaga</nombre> <habitantes>800000</habitantes> <habitantes>800000</habitantes> </ciudad> </ciudad> <ciudad> <ciudad> <nombre>Toledo</nombre> <nombre>Toledo</nombre> <habitantes>50000</habitantes> <habitantes>50000</habitantes> </ciudad> </ciudad> </ciudades> </ciudades>E
jemplo 1: transformación XSLT
E
jemplo 1: transformación XSLT
<?xml version=³1.0´?> <?xml version=³1.0´?> <ciudades> <ciudades> <ciudad> <ciudad> <nombre>Madrid</nombre> <nombre>Madrid</nombre> <habitantes>3500000</habitantes> <habitantes>3500000</habitantes> </ciudad> </ciudad> <ciudad> <ciudad> <nombre>Málaga</nombre> <nombre>Málaga</nombre> <habitantes>800000</habitantes> <habitantes>800000</habitantes> </ciudad> </ciudad> <ciudad> <ciudad> <nombre>Toledo</nombre> <nombre>Toledo</nombre> <habitantes>50000</habitantes> <habitantes>50000</habitantes> </ciudad> </ciudad> </ciudades> </ciudades>E
jemplo 1: transformación XSLT
E
jemplo 1: transformación XSLT
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <h2>Madrid</h2>3500000 <h2>Madrid</h2>3500000 <h2>Málaga</h2>800000 <h2>Málaga</h2>800000 <h2>Toledo</h2>50000 <h2>Toledo</h2>50000 El resultado obtenido no es un documento HTML válido«El resultado obtenido no es un documento HTML válido«
Vemos que en el documento de salida no sólo se ha incluidoVemos que en el documento de salida no sólo se ha incluido
el texto de los elementos procesados, sino el de todos los el texto de los elementos procesados, sino el de todos los elementos del documento original«
elementos del documento original«
Para evitar ésto, tenemos que hacer unos cambios en laPara evitar ésto, tenemos que hacer unos cambios en la
hoja de estilo XSLT (ver siguiente página): hoja de estilo XSLT (ver siguiente página):
E
jemplo 1: transformación XSLT
E
jemplo 1: transformación XSLT
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:template match="/"> <html> <html> <head> <head> <title>Ejemplo XSLT</title> <title>Ejemplo XSLT</title> </head> </head> <body> <body> <xsl:apply<xsl:apply--templates select=´nombre´ />templates select=´nombre´ /> </body> </body> </html> </html> </xsl:template> </xsl:template> <xsl:template match=´//nombre´> <xsl:template match=´//nombre´> <h2> <h2> <xsl:value
<xsl:value--of select=´.´ />of select=´.´ /> </h2> </h2> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
La regla ³de inicio´
La regla ³de inicio´
La regla <xsl:template match=³/´> se ejecuta
La regla <xsl:template match=³/´> se ejecuta
cuando se encuentra el elemento raíz del
cuando se encuentra el elemento raíz del
documento XML
documento XML
Dentro de esta regla, podemos incluir llamadas a
Dentro de esta regla, podemos incluir llamadas a
otras reglas definidas en la hoja de estilo,
otras reglas definidas en la hoja de estilo,
mediante el elemento:
mediante el elemento:
<xsl:apply
<xsl:apply--templates select=´«´ />templates select=´«´ />
El atributo select tomará como valor el nombre
El atributo select tomará como valor el nombre
del elemento asociado a la regla que queremos
del elemento asociado a la regla que queremos
³disparar´
³disparar´
Esto nos ofrece un control real sobre el ³orden´
Esto nos ofrece un control real sobre el ³orden´
de ejecución de las reglas
de ejecución de las reglas
La regla ³de inicio´
La regla ³de inicio´
El resultado de la transformación es el siguiente:
El resultado de la transformación es el siguiente:
<html> <html> <head> <head> <title>Ejemplo XSLT</title> <title>Ejemplo XSLT</title> </head> </head> <body> <body> <h2>Madrid</h2> <h2>Madrid</h2> <h2>Málaga</h2> <h2>Málaga</h2> <h2>Toledo</h2> <h2>Toledo</h2> </body> </body> </html> </html>
E
jemplos
E
jemplos
Con XML Spy, crear una primera hoja de estilo
Con XML Spy, crear una primera hoja de estilo
XSLT que, a partir del documento XML
XSLT que, a partir del documento XML
prestamos.xml, extraiga en un documento HTML
prestamos.xml, extraiga en un documento HTML
el título de los libros que se han prestado
el título de los libros que se han prestado
Formatear la lista de títulos para que se presente
Formatear la lista de títulos para que se presente
como una lista no ordenada (sin numerar), de
como una lista no ordenada (sin numerar), de
HTML
HTML
Cambiar la hoja de estilo XSLT para que los
Cambiar la hoja de estilo XSLT para que los
títulos se presenten en una tabla con una única
títulos se presenten en una tabla con una única
columna
columna
Cambiar la hoja de estilo para que los títulos se
Cambiar la hoja de estilo para que los títulos se
presenten en una tabla con dos columnas. En la
presenten en una tabla con dos columnas. En la
primera de ellas se escribirá un texto fijo: ³LIBRO
primera de ellas se escribirá un texto fijo: ³LIBRO
E
NPRESTAMO´
E
l elemento <xsl:value
E
l elemento <xsl:value--of...>
of...>
En el elemento <xsl:value
En el elemento <xsl:value--of«> se puede indicar
of«> se puede indicar
que se quiere mostrar el valor del elemento que
que se quiere mostrar el valor del elemento que
estamos procesando
estamos procesando
También podemos indicar que queremos mostrar
También podemos indicar que queremos mostrar
el valor de un elemento hijo, o descendiente, del
el valor de un elemento hijo, o descendiente, del
elemento que se está procesando
elemento que se está procesando
En el ejemplo anterior, podríamos utilizar
En el ejemplo anterior, podríamos utilizar
xsl:value
xsl:value--of para mostrar en el documento
of para mostrar en el documento
resultado de la transformación el título, código de
resultado de la transformación el título, código de
registro o fecha de préstamo de cada libro«
registro o fecha de préstamo de cada libro«
Esto es posible porque en el atributo select
Esto es posible porque en el atributo select
podemos utilizar una ³expresión XPATH´
podemos utilizar una ³expresión XPATH´
E
l elemento <xsl:value
E
l elemento <xsl:value--of...>
of...>
Por ejemplo, para mostrar el valor del elemento
Por ejemplo, para mostrar el valor del elemento
titulo, que es un hijo del elemento ejemplar,
titulo, que es un hijo del elemento ejemplar,
podríamos utilizar la siguiente regla:
podríamos utilizar la siguiente regla:
<xsl:template match="//ejemplar"> <xsl:template match="//ejemplar">
<xsl:value
<xsl:value--of select="./titulo" />of select="./titulo" /> </xsl:template>
</xsl:template>
El valor del atributo select se puede leer de la
El valor del atributo select se puede leer de la
siguiente forma: ³dame el valor del elemento
siguiente forma: ³dame el valor del elemento
titulo que es hijo del elemento que estoy
titulo que es hijo del elemento que estoy
procesando´. En este caso, cada uno de los
procesando´. En este caso, cada uno de los
elementos ejemplar
elementos ejemplar
Esto se indica mediante ./
Esto se indica mediante ./
E
l elemento <xsl:value
E
l elemento <xsl:value--of...>
of...>
UU
tilizando el documento prestamos.xml, crear
tilizando el documento prestamos.xml, crear
una hoja XSLT que transforme el documento xml
una hoja XSLT que transforme el documento xml
en un documento HTML.
en un documento HTML.
El documento HTML deberá mostrar una tabla. La
El documento HTML deberá mostrar una tabla. La
tabla contendrá una fila para cada ejemplar
tabla contendrá una fila para cada ejemplar
prestado.
prestado.
Las filas tendrán cuatro celdas, en las que
Las filas tendrán cuatro celdas, en las que
aparecerá el número de registro, el título del
aparecerá el número de registro, el título del
libro, y la fecha de préstamo y devolución.
libro, y la fecha de préstamo y devolución.
R
esumen
R
esumen
En las reglas XSLT, entre sus marcas de inicio y
En las reglas XSLT, entre sus marcas de inicio y
de fin, se puede incluir:
de fin, se puede incluir:
Texto que se escribirá ³tal cual´ en el
Texto que se escribirá ³tal cual´ en el
documento resultado de la transformación.
documento resultado de la transformación.
Marcas HTML o XML que se añadiran al
Marcas HTML o XML que se añadiran al
documento resultado de la transformación.
documento resultado de la transformación.
Elementos reservados de la especificación
Elementos reservados de la especificación
XSLT que realizarán una acción como
XSLT que realizarán una acción como
recuperar el valor de un elemento, ordenar
recuperar el valor de un elemento, ordenar
los resultados, llamar a otras reglas de la
los resultados, llamar a otras reglas de la
hoja de estilo, etc.
Orden de procesamiento
Orden de procesamiento
Las reglas se van activando y ejecutando a
Las reglas se van activando y ejecutando a
medida que se recorre el documento origen que
medida que se recorre el documento origen que
se quiere transformar.
se quiere transformar.
De esta forma, las reglas se ejecutan en el
De esta forma, las reglas se ejecutan en el
orden en el que se van encontrando los
orden en el que se van encontrando los
elementos en el documento.
elementos en el documento.
Este comportamiento por defecto puede
Este comportamiento por defecto puede
cambiarse en las hojas de estilo XSLT, a
cambiarse en las hojas de estilo XSLT, a
diferencia de lo que sucedía en las hojas de
diferencia de lo que sucedía en las hojas de
estilo CSS
estilo CSS
Esto permite ³reordenar´ los contenidos del
Esto permite ³reordenar´ los contenidos del
documento XML, de una forma distinta a como
documento XML, de una forma distinta a como
están ordenadas en el documento XML inicial
están ordenadas en el documento XML inicial
Orden de procesamiento
Orden de procesamiento
Para ordenar los contenidos, se utiliza el
Para ordenar los contenidos, se utiliza el
elemento xsl:sort
elemento xsl:sort
Xsl:sort es un elemento hijo de xsl:apply
Xsl:sort es un elemento hijo de
xsl:apply--templates
templates
Acepta dos atributos:
Acepta dos atributos:
selectselect ±± que toma como valor el nombre del elementoque toma como valor el nombre del elemento que se va a utilizar como criterio de ordenación y
que se va a utilizar como criterio de ordenación y
orderorder ±± que indica si se debe utilizar un ordenque indica si se debe utilizar un orden ascendente o descendente.
Orden de procesamiento
Orden de procesamiento
Para ordenar los contenidos, se utiliza el
Para ordenar los contenidos, se utiliza el
elemento xsl:sort
elemento xsl:sort
Xsl:sort es un elemento hijo de xsl:apply
Xsl:sort es un elemento hijo de
xsl:apply--templates
templates
Acepta dos atributos:
Acepta dos atributos:
selectselect ±± que toma como valor el nombre del elementoque toma como valor el nombre del elemento que se va a utilizar como criterio de ordenación y
que se va a utilizar como criterio de ordenación y
orderorder ±± que indica si se debe utilizar un ordenque indica si se debe utilizar un orden ascendente o descendente.
ascendente o descendente.
<xsl:apply
<xsl:apply--templates select="//ciudad">templates select="//ciudad">
<xsl:sort select="ciudad" order="descending" /> <xsl:sort select="ciudad" order="descending" /> </xsl:apply
</xsl:apply--templates>templates>
EEn el ejemplo anterior, modificar la xslt para que losn el ejemplo anterior, modificar la xslt para que los
libros se ordenen por título ascendente libros se ordenen por título ascendente
A
sociar una hoja de estilo a un documento
A
sociar una hoja de estilo a un documento
Debemos incluir, tras la declaración XML, la
Debemos incluir, tras la declaración XML, la
siguiente instrucción de procesamiento:
siguiente instrucción de procesamiento:
<?xml
<?xml--stylesheet type=´text/xsl´ href=´hojaEstilo.xsl´?>stylesheet type=´text/xsl´ href=´hojaEstilo.xsl´?>
Ejemplo
Ejemplo
<?xml version=´1.0´?> <?xml version=´1.0´?>
<?xml
<?xml--stylesheet type=´text/xsl´stylesheet type=´text/xsl´
href=´http:/www.anaya.es/docs/xml/ejemplo.x href=´http:/www.anaya.es/docs/xml/ejemplo.x sl´?> sl´?> <documento> <documento> <titulo>Programar ASP</titulo> <titulo>Programar ASP</titulo> <paginas>456</paginas> <paginas>456</paginas> <anno
<anno--pub>2001</annopub>2001</anno--pub>pub> </documento>
Leer y obtener el valor de atributos en XSLT
Leer y obtener el valor de atributos en XSLT
En XSLT podemos ³filtrar´ o indicar qué instancias de unEn XSLT podemos ³filtrar´ o indicar qué instancias de un
elemento queremos procesar, tomando como criterio de elemento queremos procesar, tomando como criterio de selección el valor de los atributos que acompañan a los selección el valor de los atributos que acompañan a los elementos
elementos
Para hacer esto, en un elemento xsl:valuePara hacer esto, en un elemento xsl:value--of, podemosof, podemos
recuperar el valor de un atributo mediante la expresión recuperar el valor de un atributo mediante la expresión @nombreAtributo , por ejemplo:
@nombreAtributo , por ejemplo:
<xsl:template match="vuelo"> <xsl:template match="vuelo">
<tr> <tr>
<td><xsl:value
<td><xsl:value--of select="@numero" /></td>of select="@numero" /></td> <td><xsl:value
<td><xsl:value--of select="@origen" /></td>of select="@origen" /></td> <td><xsl:value
<td><xsl:value--of select="@destino" /></td>of select="@destino" /></td> <td><xsl:value
<td><xsl:value--of select="@hora" /></td>of select="@hora" /></td> </tr>
</tr>
</xsl:template> </xsl:template>
Ejemplo: diseñar una hoja de estilo que convierta en una tabla losEjemplo: diseñar una hoja de estilo que convierta en una tabla los
datos de ejemplares del documento prestamoAtributos.xml datos de ejemplares del documento prestamoAtributos.xml
E
jecución condicional de reglas
E
jecución condicional de reglas
Para indicar qué instancias de un elemento queremosPara indicar qué instancias de un elemento queremos
procesar, o realizar una ³ejecución condicional de código´, procesar, o realizar una ³ejecución condicional de código´, en XSLT disponemos del elemento xsl:if
en XSLT disponemos del elemento xsl:if
Xsl:if va acompañado de un atributo test que contiene unaXsl:if va acompañado de un atributo test que contiene una
³condición´. ³condición´.
Si la condición se cumple para el elemento que se estáSi la condición se cumple para el elemento que se está
procesando, la regla de ejecutará. Por ejemplo: procesando, la regla de ejecutará. Por ejemplo:
<xsl:if test="@destino='JFK'"> <xsl:if test="@destino='JFK'"> <tr>
<tr>
<td><xsl:value
<td><xsl:value--of select="@numero" /></td>of select="@numero" /></td> <td><xsl:value
<td><xsl:value--of select="@origen" /></td>of select="@origen" /></td> <td><xsl:value
<td><xsl:value--of select="@destino" /></td>of select="@destino" /></td> <td><xsl:value
<td><xsl:value--of select="@hora" /></td>of select="@hora" /></td> </tr>
</tr> </xsl:if> </xsl:if>
E
jecución condicional de reglas: xsl:choose,
E
jecución condicional de reglas: xsl:choose,
xsl:when y xsl:otherwise
xsl:when y xsl:otherwise
Estos elementos ³amplían´ las posibilidades del elementoEstos elementos ³amplían´ las posibilidades del elemento
xsl:if xsl:if
Permiten indicar qué transformación se debe realizar en elPermiten indicar qué transformación se debe realizar en el
caso de que se cumpla una condición, y en el resto de casos caso de que se cumpla una condición, y en el resto de casos
Se utilizan de forma conjunta. El elemento xsl:chooseSe utilizan de forma conjunta. El elemento xsl:choose
contendrá a uno o más elementos xsl:when y a un elemento contendrá a uno o más elementos xsl:when y a un elemento xsl:otherwise.
xsl:otherwise.
El elemento xsl:when incluye un atributo test que tomaráEl elemento xsl:when incluye un atributo test que tomará
como valor la expresión que se evaluará. Si se cumple, se como valor la expresión que se evaluará. Si se cumple, se ejecutará el código escrito entre las etiquetas de inicio y de ejecutará el código escrito entre las etiquetas de inicio y de fin del elemento xsl:when.
fin del elemento xsl:when.
El elemento xsl:otherwise contendrá el código que seEl elemento xsl:otherwise contendrá el código que se
ejecutará si no se cumplen las expresiones indicadas en los ejecutará si no se cumplen las expresiones indicadas en los atributos test de los elementos xsl:when.
E
jecución condicional de reglas: xsl:choose,
E
jecución condicional de reglas: xsl:choose,
xsl:when y xsl:otherwise
xsl:when y xsl:otherwise
<xsl:choose> <xsl:choose>
<xsl:when test=´
<xsl:when test=´ expresiónexpresión´>´> ... ... ... ... ... ... </xsl:when> </xsl:when> <xsl:when test=´
<xsl:when test=´ expresión2expresión2´>´> ... ... ... ... ... ... </xsl:when> </xsl:when> <xsl:otherwise> <xsl:otherwise> ... ... ... ... </xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:choose>
E
jecución condicional de reglas: xsl:choose,
E
jecución condicional de reglas: xsl:choose,
xsl:when y xsl:otherwise
xsl:when y xsl:otherwise
<xsl:choose> <xsl:choose>
<xsl:when test=´
<xsl:when test=´ expresiónexpresión´>´> ... ... ... ... ... ... </xsl:when> </xsl:when> <xsl:when test=´
<xsl:when test=´ expresión2expresión2´>´> ... ... ... ... ... ... </xsl:when> </xsl:when> <xsl:otherwise> <xsl:otherwise> ... ... ... ... </xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:choose>
Continuando con el ejemplo anterior, crear una hoja deContinuando con el ejemplo anterior, crear una hoja de
estilo XSLT que muestre en rojo las filas de la tabla estilo XSLT que muestre en rojo las filas de la tabla
correspondientes a los libros que no se han devuelto aún. correspondientes a los libros que no se han devuelto aún.
Otros elementos: xsl:import y xsl:include
Otros elementos: xsl:import y xsl:include
Es posible crear hojas de estilo XSLT modulares, es decir,Es posible crear hojas de estilo XSLT modulares, es decir,
divididas en distintos archivos físicos divididas en distintos archivos físicos
En la hoja de estilo se incluirán referencias a otras hojas deEn la hoja de estilo se incluirán referencias a otras hojas de
estilo XSLT en las que se incluyen el resto de reglas. estilo XSLT en las que se incluyen el resto de reglas.
Para incluir las referencias, se pueden utilizar los elementosPara incluir las referencias, se pueden utilizar los elementos
xsl:import y xsl:include xsl:import y xsl:include
Estos dos elementos deben ir acompañados por un elementoEstos dos elementos deben ir acompañados por un elemento
href que tomará como valor el URL absoluto o relativo de la
href que tomará como valor el URL absoluto o relativo de la
hoja de estilo que se quiere utilizar. hoja de estilo que se quiere utilizar.
Otros elementos: xsl:import y xsl:include
Otros elementos: xsl:import y xsl:include
Los elementos xsl:import se debe incluir justo a continuaciónLos elementos xsl:import se debe incluir justo a continuación
de la etiqueta de inicio del elemento xsl:stylesheet, y antes de la etiqueta de inicio del elemento xsl:stylesheet, y antes de cualquier otro elemento.
de cualquier otro elemento.
El elemento xsl:include se puede incluir en cualquier lugarEl elemento xsl:include se puede incluir en cualquier lugar
del documento, siempre que se escriba fuera de una regla del documento, siempre que se escriba fuera de una regla xsl:template.
Otros elementos: xsl:import y xsl:include
Otros elementos: xsl:import y xsl:include
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:template match="/"> <html> <html> <head><title>Ejemplo</title></head> <head><title>Ejemplo</title></head> <body> <body> <h1>Lista de libros</h1> <h1>Lista de libros</h1> <xsl:apply
<xsl:apply--templates select="//libro">templates select="//libro"> <xsl:sort select="autor" /> <xsl:sort select="autor" /> </xsl:apply </xsl:apply--templates>templates> </body> </body> </html> </html> </xsl:template> </xsl:template> <xsl:template match="libro"> <xsl:template match="libro"> <p><xsl:value
<p><xsl:value--of select="autor" />.of select="autor" />. <xsl:value
<xsl:value--of select="titulo" />,of select="titulo" />, <xsl:value
<xsl:value--of select="annoof select="anno--pub" />, ISBN:pub" />, ISBN: <xsl:value
<xsl:value--of select="isbn" />of select="isbn" /><</p>/p>
</xsl:template>
</xsl:template>
</xsl:stylesheet> </xsl:stylesheet>
Otros elementos: xsl:import y xsl:include
Otros elementos: xsl:import y xsl:include
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:template match="/"> <html> <html> <head><title>Ejemplo</title></head> <head><title>Ejemplo</title></head> <body> <body> <h1>Lista de libros</h1> <h1>Lista de libros</h1> <xsl:apply<xsl:apply--templates select="//libro">templates select="//libro"> <xsl:sort select="autor" /> <xsl:sort select="autor" /> </xsl:apply </xsl:apply--templates>templates> </body> </body> </html> </html> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
Otros elementos: xsl:import y xsl:include
Otros elementos: xsl:import y xsl:include
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="libro"> <xsl:template match="libro"> <p><xsl:value
<p><xsl:value--of select="autor" />.of select="autor" />. <xsl:value
<xsl:value--of select="titulo" />,of select="titulo" />, <xsl:value
<xsl:value--of select="annoof select="anno--pub" />, ISBpub" />, ISBNN::
<xsl:value
<xsl:value--of select="isbn" /></p>of select="isbn" /></p> </xsl:template>
</xsl:template> </xsl:stylesheet> </xsl:stylesheet>
En cualquiera de las dos hojas anteriores se podría incluirEn cualquiera de las dos hojas anteriores se podría incluir
una referencia a la otra hoja de estilo, utilizando la siguiente una referencia a la otra hoja de estilo, utilizando la siguiente sintáxis: sintáxis: <?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href=´hojaEstiloLibro.xsl´ />
Otros elementos: xsl:variable
Otros elementos: xsl:variable
EEl elemento xsl:variable se utiliza para declarar unal elemento xsl:variable se utiliza para declarar una
variable variable
LLas variables nos permiten realizar operaciones conas variables nos permiten realizar operaciones con
los datos del documento XML para luego mostrar el
los datos del documento XML para luego mostrar el
resultado en el documento ³resultado´ resultado en el documento ³resultado´
EEs importante señalar que cuando se le asigna uns importante señalar que cuando se le asigna un
valor, éste ya no se puede cambiar valor, éste ya no se puede cambiar
PPara declarar una variable, se utilizará la sintáxis:ara declarar una variable, se utilizará la sintáxis:
<xsl:variable name="var" select="15" /> <xsl:variable name="var" select="15" />
Otros elementos: xsl:variable
Otros elementos: xsl:variable
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"8"??>> <pedido> <pedido> <cliente> <cliente>
<nombre>Construcciones Barcelona</nombre> <nombre>Construcciones Barcelona</nombre> <domicilio>Gran Via 45, 2º</domicilio>
<domicilio>Gran Via 45, 2º</domicilio> <localidad>Barcelona</localidad> <localidad>Barcelona</localidad> </cliente> </cliente> <detalle> <detalle> <item> <item> <material>Tornillos
<material>Tornillos--55<</material>/material> <unidades>10000</unidades> <unidades>10000</unidades> <precio>3</precio> <precio>3</precio> <total>30000</total> <total>30000</total> </item> </item> <item> <item>
<material>Paletas</material> <material>Paletas</material> <unidades>100</unidades> <unidades>100</unidades> <precio>500</precio> <precio>500</precio> <total>50000</total> <total>50000</total> </item> </item> <item> <item>
<material>Ladrillos</material> <material>Ladrillos</material> <unidades>600</unidades> <unidades>600</unidades> <precio>23</precio> <precio>23</precio> <total>13800</total> <total>13800</total> </item> </item> </detalle> </detalle> </pedido> </pedido>
Otros elementos: xsl:variable
Otros elementos: xsl:variable
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"8"??>> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:template match="/"> <html> <html>
<head><title>Pedido</title></head> <head><title>Pedido</title></head> <body> <body> <xsl:apply <xsl:apply--templates />templates /> </body></html> </body></html> </xsl:template> </xsl:template> <xsl:template match="detalle"> <xsl:template match="detalle"> <table width="85%"> <table width="85%"> <tr> <tr> <th>Material</th> <th>Material</th> <th>Unidades</th> <th>Unidades</th> <th>Precio</th> <th>Precio</th> <th>Total Pts.</th> <th>Total Pts.</th> </tr> </tr> <xsl:for
<xsl:for--each select="item">each select="item"> <tr>
<tr>
<td><xsl:value
<td><xsl:value--of select="material" />of select="material" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="unidades" />of select="unidades" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="precio" />of select="precio" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="total" />of select="total" /><</td>/td> </tr> </tr> </xsl:for </xsl:for--each>each> </table> </table> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"8"??>> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:variable name="totalPrecio" select="sum(//total)" /> <xsl:variable name="totalPrecio" select="sum(//total)" />
<xsl:template match="/"> <xsl:template match="/">
<html> <html>
<head><title>Pedido</title></head> <head><title>Pedido</title></head> <body> <body> <xsl:apply <xsl:apply--templates />templates /> </body></html> </body></html> </xsl:template> </xsl:template> <xsl:template match="detalle"> <xsl:template match="detalle"> <table width="85%"> <table width="85%"> <tr> <tr> <th>Material</th> <th>Material</th> <th>Unidades</th> <th>Unidades</th> <th>Precio</th> <th>Precio</th> <th>Total Pts.</th> <th>Total Pts.</th> </tr> </tr> <xsl:for
<xsl:for--each select="item">each select="item"> <tr>
<tr>
<td><xsl:value
<td><xsl:value--of select="material" />of select="material" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="unidades" />of select="unidades" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="precio" />of select="precio" /><</td>/td> <td><xsl:value
<td><xsl:value--of select="total" />of select="total" /><</td>/td> </tr> </tr> </xsl:for </xsl:for--each>each> </table> </table>
<h4>Total a pagar: <xsl:copy
<h4>Total a pagar: <xsl:copy--of select="$totalof select="$totalPPrecio" />recio" /><</h4>/h4> </xsl:template>
</xsl:template> </xsl:stylesheet> </xsl:stylesheet>
E
lemento xsl:copy
E
lemento xsl:copy--of
of
Se utiliza para copiar un conjunto de nodos del
Se utiliza para copiar un conjunto de nodos del
documento origen, al documento resultado de la
documento origen, al documento resultado de la
transformación.
transformación.
Se copiarán todos los nodos hijos y los atributos
Se copiarán todos los nodos hijos y los atributos
(en el caso de los elementos que los tengan).
(en el caso de los elementos que los tengan).
Este elemento es especialmente útil cuando se
Este elemento es especialmente útil cuando se
quiere convertir un documento XML a otro
quiere convertir un documento XML a otro
documento XML con una estructura diferente.
documento XML con una estructura diferente.
El elemento xsl:copy
El elemento xsl:copy--of irá acompañado por un
of irá acompañado por un
atributo select que toma como valor una
atributo select que toma como valor una
expresión que determinará los nodos que se van
expresión que determinará los nodos que se van
a copiar.
a copiar.
Este elemento también se puede utilizar para
Este elemento también se puede utilizar para
copiar en el documento resultado el valor de una
copiar en el documento resultado el valor de una
variable. En este caso, se escribirá como valor del
variable. En este caso, se escribirá como valor del
atributo select el nombre de la variable precedido
atributo select el nombre de la variable precedido
por el carácter $.
E
jemplo xsl:copy
E
jemplo xsl:copy--of
of
<?xml version="1.0" encoding="UTF
<?xml version="1.0" encoding="UTF--8"?>8"?>
<?xml
<?xml--stylesheet type="text/xsl" href="dlibros3.xsl"?>stylesheet type="text/xsl" href="dlibros3.xsl"?> <repertorio>
<repertorio> <libro> <libro>
<titulo>Don Quijote de la Mancha</titulo> <titulo>Don Quijote de la Mancha</titulo> <autor>Miguel de Cervantes</autor>
<autor>Miguel de Cervantes</autor> <anno
<anno--pub>1987</annopub>1987</anno--pub>pub> <isbn>84
<isbn>84--568568--9494--3</isbn>3</isbn> </libro> </libro> <libro> <libro> <titulo>La Galatea</titulo> <titulo>La Galatea</titulo> <autor>Miguel de Cervantes</autor> <autor>Miguel de Cervantes</autor> <anno
<anno--pub>1989</annopub>1989</anno--pub>pub> <isbn>84
<isbn>84--568568--9424</isbn>9424</isbn> </libro> </libro> <libro> <libro> <titulo>La Celestina</titulo> <titulo>La Celestina</titulo> <autor>Fernando de Rojas</autor> <autor>Fernando de Rojas</autor> <anno
<anno--pub>1998</annopub>1998</anno--pub>pub> <isbn>84
<isbn>84--568568--9595--12</isbn>12</isbn> </libro>
</libro> </repertorio> </repertorio>
E
jemplo xsl:copy
E
jemplo xsl:copy--of
of
<?xml version="1.0" encoding="UTF
<?xml version="1.0" encoding="UTF--8"?>8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF
<xsl:output method="xml" version="1.0" encoding="UTF--8" indent="yes"/>8" indent="yes"/>
<xsl:template match="/"> <xsl:template match="/">
<repertorio> <repertorio> <xsl:copy
<xsl:copy--of select="//libro[startsof select="//libro[starts--with(autor, 'Miguel de Cervantes')]" />with(autor, 'Miguel de Cervantes')]" /> </repertorio> </repertorio> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
E
jemplo xsl:copy
E
jemplo xsl:copy--of
of
<?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <repertorio> <repertorio> <libro> <libro>
<titulo>Don Quijote de la Mancha</titulo> <titulo>Don Quijote de la Mancha</titulo> <autor>Miguel de Cervantes</autor>
<autor>Miguel de Cervantes</autor> <anno
<anno--pub>1987</annopub>1987</anno--pub>pub> <isbn>84
<isbn>84--568568--9494--3</isbn>3</isbn> </libro> </libro> <libro> <libro> <titulo>La Galatea</titulo> <titulo>La Galatea</titulo> <autor>Miguel de Cervantes</autor> <autor>Miguel de Cervantes</autor> <anno
<anno--pub>1989</annopub>1989</anno--pub>pub> <isbn>84
<isbn>84--568568--9424</isbn>9424</isbn> </libro>
</libro> </repertorio> </repertorio>
UUtilizando el ejemplo de préstamos, crea una hoja de estilotilizando el ejemplo de préstamos, crea una hoja de estilo
XSLT que extraiga del documento los elementos XSLT que extraiga del documento los elementos
correspondinetes a los préstamos que no han sido devueltos correspondinetes a los préstamos que no han sido devueltos
E
jemplo xsl:copy
E
jemplo xsl:copy
Similar al elemento anterior, se utiliza para copiar elementos,Similar al elemento anterior, se utiliza para copiar elementos,
pero no se copiarán sus atributos ni sus elementos hijos pero no se copiarán sus atributos ni sus elementos hijos
Cuando se aplica sobre elementos, se copia el elemento, peroCuando se aplica sobre elementos, se copia el elemento, pero
no su valor... no su valor... Ejemplo:Ejemplo: <?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF
<xsl:output method="xml" version="1.0" encoding="UTF--8"8"
indent="yes"/> indent="yes"/> <xsl:template match="/"> <xsl:template match="/"> <repertorio> <repertorio> <xsl:apply
<xsl:apply--templates select="//autor" />templates select="//autor" /> </repertorio> </repertorio> </xsl:template> </xsl:template> <xsl:template match="autor"> <xsl:template match="autor"> <xsl:copy /> <xsl:copy /> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
E
jemplo xsl:copy
E
jemplo xsl:copy
En el ejemplo anterior, se crea un elemento autor vacío en elEn el ejemplo anterior, se crea un elemento autor vacío en el
documento destino, para cada elemento autor existente en el documento destino, para cada elemento autor existente en el documento original
documento original
Para copiar el valor de los elementos autor, habría quePara copiar el valor de los elementos autor, habría que
modificar la XSLT modificar la XSLT <?xml version="1.0" encoding="UTF <?xml version="1.0" encoding="UTF--8"?>8"?> <xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF
<xsl:output method="xml" version="1.0" encoding="UTF--8"8"
indent="yes"/> indent="yes"/> <xsl:template match="/"> <xsl:template match="/"> <repertorio> <repertorio> <xsl:apply
<xsl:apply--templates select="//autor" />templates select="//autor" /> </repertorio> </repertorio> </xsl:template> </xsl:template> <xsl:template match="autor"> <xsl:template match="autor"> <xsl:copy> <xsl:copy> <xsl:value
<xsl:value--of select=´.´ />of select=´.´ /> </xsl:copy> </xsl:copy> </xsl:template> </xsl:template> </xsl:stylesheet> </xsl:stylesheet>
E
lemento xsl:element
E
lemento xsl:element
Se utiliza para crear elementos en el documento
Se utiliza para crear elementos en el documento
resultado de la transformación.
resultado de la transformación.
Es especialmente útil cuando se utiliza XSLT para
Es especialmente útil cuando se utiliza XSLT para
transformar un documento XML en otro con una
transformar un documento XML en otro con una
estructura diferente.
estructura diferente.
xsl:element irá acompañado por un atributo name
xsl:element irá acompañado por un atributo name
que tomará como valor el nombre del elemento
que tomará como valor el nombre del elemento
que se va a crear.
que se va a crear.
Si el elemento procede de un espacio de nombres,
Si el elemento procede de un espacio de nombres,
el
URI que corresponde a este espacio de nombres
el
URI que corresponde a este espacio de nombres
se puede indicar en otro atributo: namespace
se puede indicar en otro atributo: namespace
<xsl:template match=´div1´><xsl:template match=´div1´>
<xsl:element name=´HTML:h1´ <xsl:element name=´HTML:h1´
namespace=´http://www.w3.org/HTML
namespace=´http://www.w3.org/HTML--transitional´ />transitional´ />