Diferencia entre revisiones de «XSLT con escenario de libros»
| Línea 117: | Línea 117: | ||
'''Tarefa'''. Analiza o seguinte código: | '''Tarefa'''. Analiza o seguinte código: | ||
| + | <syntaxhighlight lang=XML> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | ||
| Línea 128: | Línea 129: | ||
</xsl:stylesheet> | </xsl:stylesheet> | ||
| − | + | </syntaxhighlight> | |
| − | + | ||
| + | Aparentemente realiza o mesmo que no anterior, pero non é así. Para o mesmo nodo só pode executarse unha regla. No noso caso, a última. | ||
== Exemplo 2 - Xerando Frases == | == Exemplo 2 - Xerando Frases == | ||
| Línea 142: | Línea 144: | ||
O último parágrafo da transformación non ten sentido. Coas estruturas de control poderemos filtrar os elementos para indicar cales se visualizarán e cales non. | O último parágrafo da transformación non ten sentido. Coas estruturas de control poderemos filtrar os elementos para indicar cales se visualizarán e cales non. | ||
| − | |||
= Instrucción <xsl:text> = | = Instrucción <xsl:text> = | ||
Revisión del 09:25 7 mar 2023
Sumario
Enunciado
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="prueba.xsl" ?>
<biblioteca>
<libro>
<titulo>Don Quijote de la Mancha</titulo>
<autor nacimiento="1547">Miguel de Cervantes</autor>
<publicacion fecha="1605"/>
</libro>
<libro>
<titulo>La colmena</titulo>
<autor nacimiento="1916">Camilo José Cela</autor>
<publicacion fecha="1951"/>
</libro>
<libro>
<titulo>El lazarillo de Tormes<
<autor>Anónimo</autor>
<publicacion fecha="1554"/>
</libro>
</biblioteca>
Introdución
Primer exemplo
Si no hay plantillas, el procesador simplemente recorre todos los nodos y extrae el texto contenido por cada nodo.
En el ejemplo siguiente, el resultado incluye el contenido de los nodos que no hay ninguna plantilla.
Segundo exemplo
El resultado incluye el contenido de los nodos ya que no hay regla para ellos, pero los de <autor> se pierden porque la plantilla es vacía
Terceiro exemplo
Se a plantilla baleira é aplicada ao nodo raíz o procesador non xenera ningún resultado no documento final nin recorre ningún nodo fillo
<xsl:value-of>
A instrucción <xsl:value-of> extrae o contido do nodo seleccionado.
Exemplo 1 - autores
No exemplo seguinte, o documento final conten os autores dos libros porque a plantilla os xenera coa instrucción <xsl:value-of>. Como se aplicou unha plantilla o nodo <libro> e logo se selecciona <autor>, o resto de fillos (<titulo> e <publicacion>) non se recorren.
XSLT:
Resultado:
TAREFA. Modifica o código anterior e amosa os títulos dos libros coa instrucción <xsl:value-of>
Exemplo 2 - título e autor
Obtén o título e autor dos libros (un a continuación do outro).
Exemplo 3 - titulo, autor e data de publicación
Para extraer os atributos é preciso utilizar outra expresión (tamén XPath) co carácter “@”.
As datas de publicación obteñense grazas á regra que extraen o valor do atributo e os títulos e autores obteñense porque ao non haber regras para ese nodo extráese o contido.
XSLT:
Resultado:
TAREFA. Utilizando o código anterior realiza o seguiente cambio na plantilla: <xsl:template match="//libro"> <xsl:value-of select="publicacion/@fecha"/> </xsl:template> Entendes as expresións XPath match="//libro" e publicacion/@fecha? E o resultado obtido? Sabes por qué neste caso so se obteñen os atributos?
Exemplo 4 - qué se amosará
Para finalizar observa o seguiente código. Trata de intuir qué mostrará y cómo. Hai diferenza co resultado anterior?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="//libro">
<xsl:value-of select="titulo"/>
<xsl:value-of select="autor"/>
<xsl:value-of select="publicacion/@fecha"/>
</xsl:template>
</xsl:stylesheet>
Xenerar texto adicional
Pódese xenerar texto escribindoo na regra. Por exemplo, código HTML
Exemplo 1 - Xerando etiquetas
No seguinte exemplo obteñense os nomes dos autores porque a regra selecciona o nodo libro, pero xeneramos ademáis as etiquetas
XSLT: Resultado: Dentro da regra podemos facer referencia a varios subnodos. No seguinte exemplo obtéñense os nomes dos autores e os títulos dos libros porque a regra selecciona o nodo <libro>, pero ademáis xeneramos as etiquetas
XSLT: Resultado: Tarefa. Analiza o seguinte código:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="//libro">
<p><xsl:value-of select="autor"/></p>
</xsl:template>
<xsl:template match="
<p><xsl:value-of select="titulo"/></p>
</xsl:template>
</xsl:stylesheet>
Aparentemente realiza o mesmo que no anterior, pero non é así. Para o mesmo nodo só pode executarse unha regla. No noso caso, a última.
Exemplo 2 - Xerando Frases
Pódese xenerar texto de igual modo que xeneramos etiquetas.
Neste exemplo xenéranse frases a partir do contido dos nodos.
XSLT:
Resultado:
O último parágrafo da transformación non ten sentido. Coas estruturas de control poderemos filtrar os elementos para indicar cales se visualizarán e cales non.
Instrucción <xsl:text>
Este elemento inserta texto no documento final de saída.
Exemplo 1 - Formateando
Engadiremos tralo nome do autor:
- :
- carácter especial de salto de liña ( )
- comilla de apertura
XSLT:
Resultado:
Para visualizar os caracteres especiais representados polas constantes amp; apos; gt; lt; e quot; é preciso empregar o atributo disable-output-escaping="yes".
XSLT:
Resultado:
Aplicar regras a subnodos - <xsl:apply-templates>
A instrucción xsl:apply-templates serve para chamar a outras plantillas. Por exemplo desde o interior de outra.
Exemplo - Primeira transformación XML a HTML
Xenérase a etiqueta <html> ademáis duns parágrafos cos nomes dos libros. O navegador xa poderá interpretar o código resultante coma HTML.
CONSELLO. Utiliza a instrucción <xsl:strip-space elements="*" /> para mellorar o formato de presentación dos resultados, eliminando liñas en branco innecesarias e sangrando os elementos anidados.
Referencias
- Recurso educativo. Autor Jose A. Cortijo Leno.