Retire el espacio en blanco de XSL
-
12-10-2019 - |
Pregunta
Quiero que todo el espacio en blanco se elimine, por lo que mi código final se parece a un solo bloque de texto.
Aquí está mi encabezado
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-public="-W3CDTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="no" />
Lo que parece funcionar la mayor parte del tiempo, pero estoy teniendo problemas. Ver fuente
El área problemática parece ser
<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">
<xsl:variable name="id" select="item/@id" />
<xsl:variable name="entry" select="//people/entry[@id=$id]" />
<xsl:value-of select="$entry/display-name" />,
clinical research coordinator, at
<xsl:element name="a">
<xsl:attribute name="href">mailto:<xsl:value-of select="$entry/email" /></xsl:attribute>
<xsl:attribute name="class">email</xsl:attribute>
<xsl:value-of select="$entry/email" />
</xsl:element>
or
<xsl:value-of select="$entry/phone" />
</xsl:template>
Estoy usando Symphony CSM para generar los datos. Solo quiero que se eliminen todos los espacios en blanco, pero quiero mantener mis patrones de sangría para su legibilidad.
Solución
El área problemática parece ser
<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">
<xsl:variable name="id" select="item/@id" />
<xsl:variable name="entry" select="//people/entry[@id=$id]" />
<xsl:value-of select="$entry/display-name" />, clinical research coordinator, at
<xsl:element name="a">
<xsl:attribute name="href">mailto:
<xsl:value-of select="$entry/email" />
</xsl:attribute>
<xsl:attribute name="class">email</xsl:attribute>
<xsl:value-of select="$entry/email" />
</xsl:element>
or
<xsl:value-of select="$entry/phone" />
</xsl:template>
La solucion es:
<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">
<xsl:variable name="id" select="item/@id" />
<xsl:variable name="entry" select="//people/entry[@id=$id]" />
<xsl:value-of select="$entry/display-name" />, clinical research coordinator, at <xsl:text/>
<xsl:element name="a">
<xsl:attribute name="href">mailto:
<xsl:value-of select="$entry/email" />
</xsl:attribute>
<xsl:attribute name="class">email</xsl:attribute>
<xsl:value-of select="$entry/email" />
</xsl:element>
<xsl:text> or </xsl:text>
<xsl:value-of select="$entry/phone" />
</xsl:template>
Hacer nota: El uso del <xsl:text>
Instrucción para eliminar los caracteres en blanco existentes y para especificar explícitamente qué texto se debe emitir exactamente.
Otros consejos
De http://www.w3.org/tr/xslt#strip
Después de que se haya construido el árbol para un documento fuente o un documento de hoja de estilo, pero antes de que XSLT lo procese, algunos nodos de texto se despojan. Un nodo de texto nunca se despide a menos que contenga solo caracteres en blanco.
Este
",
clinical research coordinator, at
"
y
"
or
"
No son nodos de texto solo de espacio en blanco, entonces no deben rayarse desde la hoja de estilo.
Por eso el xsl:text
La instrucción es para. Usar:
<xsl:text>, clinical research coordinator, at </xsl:text>
y
<xsl:text> or </xsl:text>