Diferencia entre revisiones de «XSLT con escenario de libros»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 99: Línea 99:
 
Pódese xenerar texto escribindoo na regra. Por exemplo, código HTML
 
Pódese xenerar texto escribindoo na regra. Por exemplo, código HTML
  
−
== Exemplo 1 - Xerando etiquetas <p> ==
+
== Exemplo 1 - Xerando etiquetas p ==
  
−
No seguinte exemplo obteñense os nomes dos autores porque a regra selecciona o nodo libro, pero xeneramos ademáis as etiquetas <p>
+
No seguinte exemplo obteñense os nomes dos autores porque a regra selecciona o nodo libro, pero xeneramos ademáis as etiquetas p
  
 
XSLT:
 
XSLT:

Revisión del 09:26 7 mar 2023

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 p

No seguinte exemplo obteñense os nomes dos autores porque a regra selecciona o nodo libro, pero xeneramos ademáis as etiquetas p

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