Probador XSLT
Pega un documento XML y una hoja de estilos XSLT 1.0 para transformarlo al instante. Ve el resultado como vista previa HTML renderizada o como código formateado, define parámetros de la hoja de estilos y recibe indicaciones claras cuando algo falla. Todo se ejecuta localmente con el procesador XSLT integrado en tu navegador.
Última actualización:
Usa el procesador XSLT 1.0 integrado en tu navegador (XSLTProcessor). Tu XML y tu hoja de estilos nunca salen de esta página; la vista previa se ejecuta en un entorno aislado con los scripts desactivados.
Cómo usar Probador XSLT
- Elige un ejemplo de la lista para empezar, o pega tu propio documento XML en el cuadro izquierdo y tu hoja de estilos XSLT en el derecho. También puedes abrir archivos desde tu dispositivo.
- Mira cómo se actualiza la salida mientras escribes. Con Transformación en directo desactivada, pulsa Transformar XML o Ctrl+Intro.
- Define parámetros: cada xsl:param de nivel superior de tu hoja de estilos tiene un cuadro de entrada; escribe un valor para sustituir su valor predeterminado.
- Cambia de vista entre Vista previa (HTML renderizado o texto formateado) y Código de salida (el marcado o texto exacto producido).
- Corrige cualquier problema con el mensaje sobre la salida: muestra los errores de análisis por línea y columna y señala errores de XPath o de XSLT 2.0.
- Copia o descarga el resultado cuando esté bien.
Cómo funciona una hoja de estilos XSLT
Un procesador XSLT lee el XML de origen como un árbol y empieza por el nodo raíz. Busca la plantilla cuyo patrón match encaja mejor con ese nodo y la ejecuta. Dentro de una plantilla, los elementos literales como <tr> se copian a la salida, mientras que las instrucciones del espacio de nombres xsl: calculan contenido: xsl:value-of genera el valor de cadena de una expresión XPath, xsl:for-each recorre bucles y xsl:apply-templates devuelve los nodos hijos al procesador para que se ejecuten sus propias plantillas. Cuando ninguna plantilla coincide, las reglas integradas copian el texto y siguen bajando por el árbol, por eso una hoja de estilos casi vacía sigue generando todo el texto de un documento.
Los valores de atributo escritos entre llaves, como <item sku="{@id}">, son plantillas de valor de atributo: el XPath entre llaves se evalúa y se inserta. Dentro de un archivo XSLT, una comparación "menor que" debe escribirse como <, porque la hoja de estilos también es XML: test="price < 20".
Qué motor ejecuta tu hoja de estilos
La mayoría de los navegadores han incluido un procesador XSLT 1.0 nativo (libxslt en Chrome y Safari, TransforMiix en Firefox), disponible para las páginas web como XSLTProcessor. Los fabricantes lo están retirando, así que este probador lo busca primero y, si falta, carga desde un CDN xslt-processor, una implementación de XSLT 1.0 de código abierto en JavaScript puro, la primera vez que transformas. El mensaje sobre la salida indica qué motor se usó. Los resultados son los mismos con hojas de estilos habituales; las funciones poco usadas (algunos formatos de xsl:number, funciones de extensión, el tratamiento exacto de espacios en blanco) pueden diferir, así que comprueba los casos límite con un procesador de línea de comandos como xsltproc antes de confiar en ellos en producción.
Referencia de instrucciones XSLT 1.0
| Instrucción | Qué hace | Ejemplo |
|---|---|---|
xsl:template | Regla para los nodos que coinciden con un patrón, o un bloque reutilizable con nombre | <xsl:template match="book"> |
xsl:apply-templates | Procesa los nodos seleccionados con sus plantillas correspondientes | <xsl:apply-templates select="book"/> |
xsl:value-of | Genera el valor de cadena de una expresión | <xsl:value-of select="title"/> |
xsl:for-each | Recorre un conjunto de nodos (puede contener xsl:sort) | <xsl:for-each select="//book"> |
xsl:sort | Ordena un bucle o apply-templates; como texto o número, ascendente o descendente | <xsl:sort select="price" data-type="number"/> |
xsl:if | Genera contenido cuando una prueba es verdadera (sin rama else) | <xsl:if test="stock = 0"> |
xsl:choose / when / otherwise | If / else-if / else | <xsl:when test="@lang='fr'"> |
xsl:variable, xsl:param | Asigna un valor (las variables no se pueden cambiar después); los parámetros se pueden sustituir | <xsl:variable name="n" select="count(book)"/> |
xsl:call-template | Llama a una plantilla con nombre, a menudo de forma recursiva, con xsl:with-param | <xsl:call-template name="esc"/> |
xsl:copy, xsl:copy-of | Copia superficial del nodo actual / copia profunda de un conjunto de nodos | <xsl:copy-of select="author"/> |
xsl:element, xsl:attribute | Crea un elemento o atributo con un nombre o valor calculado | <xsl:attribute name="class"> |
xsl:key | Indexa nodos para búsquedas rápidas con key() y para agrupar | <xsl:key name="k" match="book" use="@category"/> |
xsl:number | Inserta un número de secuencia con formato (1, a, A, i, 01…) | <xsl:number format="1."/> |
xsl:output | Elige salida html, xml o text, la sangría y la declaración | <xsl:output method="text"/> |
Patrones habituales y consejos
- Transformación identidad: una plantilla que coincide con
@* | node(), hacexsl:copyy aplica plantillas a sus hijos copia todo el documento. Añade plantillas más específicas para renombrar, eliminar o cambiar solo algunos nodos (mira el ejemplo "Reestructurar XML"). - Agrupación en XSLT 1.0: define
xsl:keysobre el valor de agrupación y recorre los nodos en los quegenerate-id() = generate-id(key('k', @category)[1]), el primer nodo de cada grupo. Es el método muenchiano. - Números como texto:
xsl:sortordena alfabéticamente salvo que añadasdata-type="number"; si no, 100 va antes que 20. - Espacios en blanco: usa
xsl:textpara texto exacto y saltos de línea ( ) en la salida de texto, yxsl:strip-space elements="*"para eliminar del origen los nodos de texto que solo contienen sangría. - Formato de números:
format-number(1234.5, '#,##0.00')da 1,234.50. - Espacios de nombres predeterminados: XPath 1.0 no tiene espacio de nombres de elemento predeterminado, así que declara un prefijo para el XML con espacio de nombres y úsalo en cada patrón y select.
Preguntas frecuentes
¿Qué es XSLT?
XSLT (Extensible Stylesheet Language Transformations) es un lenguaje del W3C para transformar documentos XML en otro XML, HTML o texto sin formato. Una hoja de estilos es a su vez un documento XML formado por plantillas: cada xsl:template coincide con nodos mediante un patrón XPath y describe qué generar para ellos. Se usa mucho para convertir feeds de datos en páginas web, convertir entre formatos XML y generar informes.
¿Qué versión de XSLT admite este probador?
XSLT 1.0 con XPath 1.0, que es lo que implementa el procesador XSLT integrado en los navegadores web. Las funciones de XSLT 2.0 y 3.0, como xsl:for-each-group, xsl:function, expresiones regulares, lower-case() o format-date(), no están disponibles. El probador las señala y sugiere alternativas de XSLT 1.0, por ejemplo la agrupación muenchiana con xsl:key en lugar de xsl:for-each-group.
¿Funciona en navegadores sin XSLT integrado?
Sí. Los fabricantes de navegadores están retirando el XSLTProcessor nativo, y Chrome ha anunciado su eliminación. Cuando falta el motor integrado, el probador descarga automáticamente xslt-processor, un motor XSLT 1.0 de código abierto escrito en JavaScript, y ejecuta tu hoja de estilos con él. Ese motor cubre las instrucciones XSLT 1.0 y funciones XPath habituales e informa de los mensajes de error, mientras que los motores nativos fallan sin avisar; para estos, el probador enumera las causas probables, como una variable no declarada o un XPath no válido.
¿Por qué mi salida está vacía o es solo texto plano?
La causa más habitual es una discrepancia de espacio de nombres: si el XML tiene un espacio de nombres predeterminado (xmlns="…"), match="book" no coincidirá. Declara el mismo URI de espacio de nombres con un prefijo en la hoja de estilos, por ejemplo xmlns:b="…", y usa match b:book. Otra causa son las reglas de plantilla integradas: cuando ninguna plantilla coincide, XSLT copia solo el texto de los elementos, así que la salida parece texto todo junto.
¿Cómo paso parámetros a la hoja de estilos?
Decláralos en el nivel superior con xsl:param, por ejemplo <xsl:param name="minPrice" select="0"/>. El probador crea un cuadro de entrada para cada uno. Un valor escrito se pasa como cadena, igual que en la mayoría de los procesadores de línea de comandos; usa number($minPrice) cuando necesites compararlo numéricamente. Deja el cuadro vacío para usar el valor predeterminado.
¿Qué diferencia hay entre los métodos de salida html, xml y text?
method="xml" escribe XML bien formado con una declaración XML opcional. method="html" escribe HTML, así que los elementos vacíos como br no se autocierran y los caracteres especiales se tratan al modo HTML. method="text" escribe solo el valor de cadena del resultado, sin marcado ni escapes, que es como se generan CSV, JSON o informes de texto. Sin xsl:output, el método es html cuando el primer elemento de salida es <html> y xml en caso contrario.
¿Se sube mi XML a algún sitio?
No. El análisis y la transformación se hacen en esta página, con el motor XSLT de tu navegador o el motor JavaScript de respaldo (solo se descarga el código del motor, nunca tus datos), así que tus documentos nunca salen de tu dispositivo. La vista previa HTML se muestra en un marco aislado con los scripts desactivados. Los archivos externos referenciados mediante xsl:include, xsl:import o document() no se descargan.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.