¿Cómo puedo insertar
En una hoja de estilo XSLT, sigo recibiendo este error:
Error de análisis XML: entidad indefinida
Esencialmente, quiero un carácter de espacio que no se rompa en la plantilla XSLT.
¿Cómo puedo insertar
En una hoja de estilo XSLT, sigo recibiendo este error:
Error de análisis XML: entidad indefinida
Esencialmente, quiero un carácter de espacio que no se rompa en la plantilla XSLT.
Respuestas:
Usa el código de entidad  
lugar.
es una "referencia de entidad de caracteres" HTML. No hay una entidad con nombre para el espacio sin interrupción en XML, por lo que utiliza el código  
.
Wikipedia incluye una lista de entidades XML y HTML , y puede ver que solo hay 5 "entidades predefinidas" en XML, pero HTML tiene más de 200. También señalaré Crear un espacio (& nbsp;) en XSL que tiene Excelentes respuestas.
Š
lugar de  
la última, que siempre se resolverá en un espacio Unicode sin interrupción.
 
funciona muy bien Sin embargo, mostrará uno de esos caracteres extraños en la codificación ANSI. <xsl:text>
funcionó mejor para mí
<xsl:text> </xsl:text>
También se puede hacer esto:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, lo cual no es necesario y fue desaprobado en XSLT 2.0 y más en 3.0. En estas versiones, puede alcanzar el mismo efecto con xsl:character-map
procesador cruzado garantizado para trabajar. Además, esto coloca una entidad con nombre
en la salida, que no es necesariamente lo mismo que un espacio sin interrupción y el extremo receptor debe tener esta entidad declarada (en HTML generalmente es implícita).
Utilizar este
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
editar: los downvoters probablemente deberían validar que esto funciona primero (lo hace, y es la solución más general al problema).
Es posible que desee agregar la definición de esta entidad al comienzo del archivo (debajo de la declaración xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
También puede agregar más entidades como Ntilde, Aacute, etc.
Además de la respuesta de victor hugo, es posible obtener todas las referencias de caracteres conocidas legales en un archivo XSLT, como este:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text>& –</xsl:text>
También hay cierta diferencia en el resultado de este enfoque en comparación con <xsl:text disable-output-escaping="yes">
uno. Este último producirá literales de cadena como
para todo tipo de salida, incluso para <xsl:output method="text">
, y esto puede ser diferente de lo que desee ... Por el contrario, obtener entidades definidas para la plantilla XSLT a través de <!DOCTYPE ... <!ENTITY ...
siempre producirá resultados consistentes con su xsl:output
configuración
Y cuando se incluyen todas las referencias de caracteres, puede ser conveniente utilizar un resolutor de entidad local para evitar que el motor XSLT obtenga definiciones de entidad de caracteres de Internet. Los usuarios de JAXP o Xalan-J explícitos pueden necesitar un parche para que Xalan-J use el resolutor correctamente. Vea mi blog XSLT, entidades, Java, Xalan ... para descargar parches y comentarios.
Cuando use lo siguiente ( disable-output-escaping
¡ sin !) Obtendrá un espacio único que no se rompe:
<xsl:text> </xsl:text>
disable-output-escaping
para esto
Las hojas de estilo XSLT deben ser XML bien formadas. Como " "
no es una de las cinco entidades XML predefinidas , no se puede incluir directamente en la hoja de estilo. Así que volver a su solución " "
es un reemplazo perfecto de" "
que debe usar.
Ejemplo:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
también puedes usar:
<xsl:value-of select="'&nbsp'"/>
recuerde el amplificador después de & o recibirá un mensaje de error
&nbsp;
(suponiendo que pretendía que el punto y coma estuviera allí), que se representará como
, no como `` (nb-space).
Estaba tratando de mostrar bordes en una celda vacía en una tabla HTML. Mi viejo truco de usar espacio que no se rompe en celdas vacías no funcionaba desde xslt. Usé salto de línea con el mismo efecto. Menciono esto solo en caso de que la razón por la que intentabas usar el espacio sin interrupción fuera para dar algo de contenido a una celda de tabla 'vacía' para activar los bordes de la celda.
<br/>
Tratar de usar
<xsl:text> </xsl:text>
Pero depende del procesador XSLT que esté utilizando: la especificación XSLT no requiere procesadores XSLT para convertirlo en "
".
Aunque la respuesta ya ha sido proporcionada por @brabster y otros.
Creo que una solución más reutilizable sería:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>