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  .
Recientemente nos encontramos con una situación en la que solo uno de los muchos XSL dejó de funcionar con esta técnica y comenzó a mostrar un personaje extraño. Sin embargo, si uso la técnica CDATA de WaterSoul, funciona.
@BrianReindel, eso probablemente significa que usó la referencia de entidad numérica incorrecta, es decir, en Šlugar de  la última, que siempre se resolverá en un espacio Unicode sin interrupción.
Usando la respuesta aceptada, terminé con un espacio de salto de línea en mi salida XML (al menos eso es lo que parecía en el editor XML de VS2010). Usando esta respuesta, obtengo exactamente 1 espacio solo.
Mathijs Flietstra
1
@ Matthijs, este es un espacio, no un espacio sin interrupciones, que no es lo mismo. Si VS lo muestra incorrectamente, verifique su codificación (VS es perfectamente capaz de mostrar esto correctamente y debería ser una codificación independiente, por lo que es más probable que esté haciendo algo más mal).
Esto funcionará si el procesador es compatibledisable-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-mapprocesador 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).
No estoy seguro, pero he probado mi enfoque y funciona, así que no estoy seguro de para qué fue el
voto negativo
2
Además, la respuesta aceptada no será válida para todos los analizadores de acuerdo con la página vinculada; sólo un
aviso
1
He dado la razón de mi voto negativo antes, pero si tuviera que votar negativamente esta respuesta, entonces la razón sería: responde a la pregunta incorrecta. El OP claramente le preguntó cómo poner un espacio no rompible, usando xslt y usted respondió cómo poner una secuencia de punto y coma ampersand-nbsp. Y las disputas por votos negativos también son desagradables. Pero en serio, ¿nunca has dicho eso sobre CDATA?
Michael Krelin - hacker
1
De acuerdo, jagprinderdeep, revoco mi voto negativo, pero a cambio, ve a visitarme una vez que llegue al manicomio. (tenga en cuenta que no le devuelvo el voto negativo por esa nueva razón). Pero entienda que responde la pregunta incorrecta. Creo que esa fue exactamente la razón detrás del otro voto negativo.
Michael Krelin - hacker
8
También voté en contra, ya que no puede garantizar que el receptor recibirá & nbsp ;. Si está trabajando con xslt + html, entonces sí, esta es una forma de hacerlo, aunque sea un truco. Pero, si está usando xslt para generar otro xml, entonces simplemente explotará.
Doug
14
Es posible que desee agregar la definición de esta entidad al comienzo del archivo (debajo de la declaración xml):
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:outputconfiguració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.
Tenga en cuenta que recientemente, W3 comenzó a bloquear demasiadas solicitudes a esos y enlaces similares si proviene de un proceso automatizado. Coloque ese archivo localmente o en su servidor y ajuste la URL en consecuencia y debería estar bien. Aparte de eso, +1, y una excelente solución para usar entidades con nombre HTML.
Abel
Una buena nota, y también hay otra razón para tener una copia local del archivo con definiciones de entidad, ya que de lo contrario es probable que el proceso XSLT falle si la conexión a Internet no está disponible. En el mundo de Java no hay necesidad de hackear URL, ya que es posible organizar un EntityResolver , y Apache XML Commons Resolver puede ser un buen candidato. Es probable que otras plataformas de programación también tengan técnicas similares ...
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.
Esto generará &nbsp;(suponiendo que pretendía que el punto y coma estuviera allí), que se representará como , no como `` (nb-space).
Abel
0
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.
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.
fuente
Š
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ífuente
También se puede hacer esto:
fuente
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 conxsl: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
editar: los downvoters probablemente deberían validar que esto funciona primero (lo hace, y es la solución más general al problema).
fuente
Es posible que desee agregar la definición de esta entidad al comienzo del archivo (debajo de la declaración xml):
También puede agregar más entidades como Ntilde, Aacute, etc.
fuente
Además de la respuesta de victor hugo, es posible obtener todas las referencias de caracteres conocidas legales en un archivo XSLT, como este:
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 suxsl:output
configuraciónY 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.
fuente
Cuando use lo siguiente (
disable-output-escaping
¡ sin !) Obtendrá un espacio único que no se rompe:<xsl:text> </xsl:text>
fuente
disable-output-escaping
para estoLas 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:
fuente
también puedes usar:
recuerde el amplificador después de & o recibirá un mensaje de error
fuente
&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.
fuente
Tratar de usar
Pero depende del procesador XSLT que esté utilizando: la especificación XSLT no requiere procesadores XSLT para convertirlo en "
".fuente
Aunque la respuesta ya ha sido proporcionada por @brabster y otros.
Creo que una solución más reutilizable sería:
fuente