Guía XSLT Transformaciones - Irene-Frias/1DAM GitHub Wiki

📈 Guía XSLT Transformaciones

📜 ¿Qué es un XSLT?

XML Schema (XSD - XML Schema Definition) es un lenguaje utilizado para definir la estructura, contenido y restricciones de un documento XML. Su propósito es garantizar que los datos almacenados o intercambiados en XML sigan un formato específico y sean válidos según reglas predefinidas.

A diferencia de DTD (Document Type Definition), XML Schema ofrece una sintaxis más avanzada y expresiva, ya que:

  • Está basado en XML, lo que facilita su legibilidad e integración.
  • Permite definir tipos de datos (números, fechas, booleanos, etc.).
  • Soporta estructuras complejas y reutilización de elementos.
  • Es compatible con namespaces, lo que evita conflictos entre esquemas.

🏗️ Estructura de documento XSLT

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    
    <xsl:template match="/">
        <!-- Aquí va el contenido HTML que se genera -->
    </xsl:template>
</xsl:stylesheet>

A continuación explicaremos un poco las etiquetas más relevantes sobre la estructura del documento XSLT.

Elementos del documento Definición de las etiquetas
<xsl:stylesheet> Es la raíz del documento xslt
(xmlns:xsl="...") Son espacios de nombres de xslt
<xsl:output> El formato que da la salida del documento
<xsl:template match="/"> La plantilla inicial está indicando que se aplica al nodo raíz

🏗️ Estructura de documento XSLT

Se suelen utilizar una serie de instrucciones en las que muestre el contenido de los elementos que queramos.

  • Muestra el valor indicado del contenido indicado.
<xsl:value-of select="elemento"/>
  • Dependiendo de si se cumple o no la condición ejecutará una cosa u otra. Hay varias formas de representar las condicionales una de ellas con un <xsl:if> y otra de ellas <xsl:choose>. Un simple <xsl:if> sería tal que así:
<xsl:if test="precio &gt; 100">
    <span class="rojo">Precio alto</span>
</xsl:if>

Uno complejo <xsl:choose>, este es un equivalente a un if...else if...else

<xsl:choose>
    <xsl:when test="condicion">...</xsl:when>
    <xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
  • Para recorrer los elementos, repetirá una acción para cada nodo que coincida.
<xsl:for-each select="elementos/elemento">
    <p><xsl:value-of select="nombre"/></p>
</xsl:for-each>
  • Si queremos ordenar los resultados dentro de una sentencia para ordenar los nodos utilizarnos el elemento <xsl:sort>.
<xsl:sort select="nombre" data-type="text" order="ascending"/>

Expresiones y funcionalidades

Hay otras expresiones dentro de bucles en los que se utilizan comúnmente para el formateo y la lógica de control.

  • La expresión <xsl:if test="position() != last()">, </xsl:if>. Como se puede ver en el ejemplo, imprime cada autor separado por una coma, pero la condición <xsl:if test="position() != last()">, </xsl:if> con las funcionalidades de position() y que sea != last() no imprimirá última coma.
<xsl:for-each select="autor">
  <xsl:value-of select="nombre"/> <xsl:value-of select="apellido"/>
  <xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
  • La expresión <xsl:if test="contains(cadena, 'texto')"> ... </xsl:if>. Comprueba una cadena específica que contiene una subcadena específica. Y cuando se quiera mostrar o filtrar los elementos que se mencionan en cierto campo.
<xsl:if test="contains(nombre, 'Web')">
  <p>Este ciclo está relacionado con la web.</p>
</xsl:if>
  • La expresión <xsl:if test="starts-with(cadena, 'X')"> ... </xsl:if>. Comprueba que la cadena comienza con un texto específico. Los elementos que comienzan por un prefijo determinado se clasifica o aplican estilos a los elementos que comienzan.
<xsl:if test="starts-with(nombre, 'Admin')">
  <p>Este ciclo comienza por "Admin".</p>
</xsl:if>
  • La expresión <xsl:if test="number(...) [condición]"> ... </xsl:if>`. Convierte el valor de un número de texto a número para poder compararlo.
<xsl:if test="number(precio) &gt; 50">
  <p>Este libro es caro.</p>
</xsl:if>
  • La expresión <xsl:if test="string-length(...) [condición]"> ... </xsl:if>. Devuelve el número de caracteres de una cadena en la que devuelve la longitud del contenido de la misma. Además permite validar si un campo está vacío string-length(.) = 0`. Detectar texto largos para truncarlos o aplicar estilos.
<xsl:if test="string-length(titulo) &gt; 10">
  <p>Título largo</p>
</xsl:if>

Entidades de caracteres HTML (o XML)

Carácter Código decimal Código hexadecimal
á &#225; &#xE1;
é &#233; &#xE9;
í &#237; &#xED;
ó &#243; &#xF3;
ú &#250; &#xFA;
ñ &#241; &#xF1;
ü &#252; &#xFC;
ç &#231; &#xE7;

También existen entidades con nombre. Se recomiendan las entidades numéricas porque no todas las entidades con nombre están definidas. &nbsp; → espacio no separable
&copy; → ©
&ntilde; → ñ

⚠️ **GitHub.com Fallback** ⚠️