XSL - output indentado y no indentado

 
Vista:

output indentado y no indentado

Publicado por koldorv (2 intervenciones) el 03/11/2005 10:53:37
Hola, a partir de un xsl estoy estoy recorriendo un xml para obtener otro xml con datos, este xsl tiene como salida <xsl:output method="xml" indent="yes"/>, pero hay una parte que no quiero hacerle sangría, que es una imagen pixel:
<td bgcolor="#007AC3" width="150" height="1"><img alt="" src="espacio.gif" width="150" height="1" border="0"/><td>

De modo que si le hago sangría me quedaría
<td bgcolor="#007AC3" width="150" height="1">
<img alt="" src="espacio.gif" width="150" height="1" border="0"/>
<td>

Perdiendo su funcionamiento.
Pero el resto de documento quiero que siga con la sangría.
¿Hay alguna manera de hacer sangría en una parte del documento y en otra no?
Gracias, un saludo!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Aplicar sangría selectivamente en un documento XML

Publicado por Alejandro (227 intervenciones) el 05/07/2023 16:57:30
Si deseas aplicar sangría selectivamente en un documento XML generado a partir de un XSLT, puedes utilizar una combinación de elementos y atributos especiales para controlar el formato. A continuación, te muestro cómo puedes lograrlo en XSLT:

1. Define una plantilla específica para el elemento que no deseas sangrar. Por ejemplo, supongamos que el elemento en cuestión es `<img>`. Puedes crear una plantilla para `<img>` y establecer `xml:space="preserve"` en su atributo `style` para evitar la sangría:

1
2
3
4
5
6
<xsl:template match="img">
  <xsl:copy>
    <xsl:attribute name="style">xml:space="preserve"</xsl:attribute>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

2. Asegúrate de tener una regla de identidad en tu XSLT para copiar los elementos y atributos que no tienen una plantilla específica. Esto garantizará que se conserven en el resultado sin modificaciones adicionales:

1
2
3
4
5
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

Con estas plantillas en tu XSLT, cuando apliques la transformación a tu XML, todos los elementos y atributos se copiarán en el resultado sin cambios, excepto el elemento `<img>`. Para ese elemento, se aplicará la plantilla personalizada que establece `xml:space="preserve"`, evitando así la sangría.

Es importante tener en cuenta que esta solución supone que estás generando el documento XML utilizando el elemento `<xsl:output method="xml" indent="yes"/>` en tu XSLT para aplicar la sangría general al documento. La solución propuesta simplemente evita la sangría para el elemento específico, manteniendo el resto del documento con la sangría aplicada.

Espero que esto te ayude a aplicar sangría selectivamente en tu documento XML generado a partir de un XSLT. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar