é uma "referência de entidade de caracteres" em HTML. Não existe uma entidade nomeada para espaço sem quebra no XML; portanto, você usa o código  .
Recentemente, enfrentamos uma situação em que apenas um dos muitos XSL parou de trabalhar com essa técnica e começamos a mostrar um personagem estranho. No entanto, se eu usar a técnica CDATA do WaterSoul, ela funcionará.
@BrianReindel, isso provavelmente significa que você usou a referência de entidade numérica incorreta, ou seja, em Švez da  última, que sempre será resolvida para um espaço sem quebra de Unicode.
Usando a resposta aceita, acabei com um espaço de quebra de linha na minha saída XML (pelo menos é o que parecia no editor XML do VS2010). Usando esta resposta, recebo exatamente 1 espaço.
Mathijs Flietstra
1
@ Matthijs, este é um espaço, não um espaço ininterrupto, que não é o mesmo. Se o VS mostrar incorretamente, verifique sua codificação (o VS é perfeitamente capaz de mostrar isso corretamente e deve ser independente da codificação, portanto é mais provável que você esteja fazendo outra coisa errada).
Isso funcionará se o processador suportardisable-output-escaping , para o qual não é necessário e foi preterido no XSLT 2.0 e, mais ainda, no 3.0. Nessas versões, você pode alcançar o mesmo efeito com xsl:character-mapgarantia de trabalhar com vários processadores. Além disso, isso coloca uma entidade nomeada na saída, que não é necessariamente a mesma que um espaço sem quebra e o terminal receptor deve ter essa entidade declarada (em HTML, geralmente é implicitamente).
Não tenho certeza, mas eu testei a minha abordagem e ele funciona, então eu não estou certo o que o downvote foi para :(
jagprinderdeep
2
Além disso, a resposta aceita não será válida para todos os analisadores de acordo com a página vinculada; apenas um heads-up
jagprinderdeep
1
Eu já mencionei o motivo do meu voto negativo, mas se eu recusasse essa resposta, o motivo seria: ele responde à pergunta errada. O OP perguntou claramente como colocar um espaço inquebrável, usando xslt, e você respondeu como colocar a sequência e comercial-nbsp-ponto-e-vírgula. E brigar sobre votos negativos também é desagradável. Mas falando sério, você nunca disse isso sobre o CDATA?
Michael Krelin - hacker 22/09/09
1
Ok, jagprinderdeep, eu revogo meu voto negativo, mas em troca, por favor, vá me visitar quando eu atingir o asilo mental. (observe que eu não devolvi o voto negativo por esse novo motivo). Mas entenda que você responde à pergunta errada. Eu acho que essa foi exatamente a razão por trás do outro voto negativo.
Michael Krelin - hacker
8
Também votei com o voto negativo, pois você não pode garantir que o fim do recebimento declarará & nbsp ;. Se você estiver trabalhando com xslt + html, sim, essa é uma maneira de fazê-lo, embora seja um hack. Mas, se você estiver usando o xslt para gerar outro xml, ele simplesmente explodirá em você.
Doug
14
Convém adicionar a definição para essa entidade no início do arquivo (abaixo da declaração xml):
Também há certa diferença no resultado dessa abordagem em comparação com <xsl:text disable-output-escaping="yes">uma. O último produzirá literais de string como para todos os tipos de saída, mesmo para <xsl:output method="text">, e isso pode ser diferente do que você pode desejar ... Pelo contrário, obter entidades definidas para o modelo XSLT <!DOCTYPE ... <!ENTITY ...sempre produzirá saída consistente com suas xsl:outputconfigurações.
E ao incluir todas as referências de caracteres, pode ser aconselhável usar um resolvedor de entidade local para impedir que o mecanismo XSLT busque definições de entidade de caracteres da Internet. Usuários JAXP ou Xalan-J explícitos podem precisar de um patch para o Xalan-J usar o resolvedor corretamente. Veja meu blog XSLT, entidades, Java, Xalan ... para download de patch e comentários.
Observe que, recentemente, o W3 começou a bloquear muitas solicitações para aqueles e links semelhantes, se provenientes de um processo automatizado. Coloque esse arquivo localmente ou em seu servidor e ajuste a URL de acordo. Fora isso, +1 e excelente solução para usar entidades nomeadas em HTML.
Abel
Uma boa observação, e também há outro motivo para ter uma cópia local do arquivo com definições de entidade, pois caso contrário, o processo XSLT provavelmente falhará se a conexão à Internet não estiver disponível. No mundo Java, não há necessidade de hackear URLs, pois é possível organizar um EntityResolver , e o Apache XML Commons Resolver pode ser um bom candidato. Outras plataformas de programação são susceptíveis de ter técnicas semelhantes também ...
As folhas de estilo XSLT devem ser XML bem formado. Como " "não é uma das cinco entidades XML predefinidas , não pode ser incluída diretamente na folha de estilo. Portanto, retornar à sua solução " "é um substituto perfeito que " "você deve usar.
Isso será exibido &nbsp;(supondo que você pretenda que o ponto-e-vírgula esteja lá), que será renderizado como , e não como `` (nb-space).
Abel
0
Eu estava tentando exibir bordas em uma célula vazia em uma tabela HTML. Meu velho truque de usar espaço sem quebra em células vazias não estava funcionando no xslt. Eu usei quebra de linha com o mesmo efeito. Mencionei isso apenas no caso de você estar tentando usar o espaço ininterrupto para fornecer algum conteúdo a uma célula da tabela 'vazia' para ativar as bordas da célula.
Respostas:
Use o código da entidade
 
.
é uma "referência de entidade de caracteres" em HTML. Não existe uma entidade nomeada para espaço sem quebra no XML; portanto, você usa o código 
.A Wikipedia inclui uma lista de entidades XML e HTML , e você pode ver que existem apenas 5 "entidades predefinidas" em XML, mas o HTML tem mais de 200. Também vou apontar para Criando um espaço (& nbsp;) em XSL que possui excelentes respostas.
fonte
Š
vez da 
última, que sempre será resolvida para um espaço sem quebra de Unicode. 
funciona muito bem. No entanto, ele exibirá um desses caracteres estranhos na codificação ANSI.<xsl:text>
funcionou melhor para mim.fonte
Pode-se também fazer isso:
fonte
disable-output-escaping
, para o qual não é necessário e foi preterido no XSLT 2.0 e, mais ainda, no 3.0. Nessas versões, você pode alcançar o mesmo efeito comxsl:character-map
garantia de trabalhar com vários processadores. Além disso, isso coloca uma entidade nomeada
na saída, que não é necessariamente a mesma que um espaço sem quebra e o terminal receptor deve ter essa entidade declarada (em HTML, geralmente é implicitamente).Usa isto
edit: Downvoters provavelmente devem validar que isso funcione primeiro (funciona e é a solução mais geral para o problema).
fonte
Convém adicionar a definição para essa entidade no início do arquivo (abaixo da declaração xml):
Além disso, você pode adicionar mais entidades como Ntilde, Aacute, etc.
fonte
Além da resposta de victor hugo , é possível obter todas as referências de caracteres conhecidas legalmente em um arquivo XSLT, assim:
Também há certa diferença no resultado dessa abordagem em comparação com
<xsl:text disable-output-escaping="yes">
uma. O último produzirá literais de string como
para todos os tipos de saída, mesmo para<xsl:output method="text">
, e isso pode ser diferente do que você pode desejar ... Pelo contrário, obter entidades definidas para o modelo XSLT<!DOCTYPE ... <!ENTITY ...
sempre produzirá saída consistente com suasxsl:output
configurações.E ao incluir todas as referências de caracteres, pode ser aconselhável usar um resolvedor de entidade local para impedir que o mecanismo XSLT busque definições de entidade de caracteres da Internet. Usuários JAXP ou Xalan-J explícitos podem precisar de um patch para o Xalan-J usar o resolvedor corretamente. Veja meu blog XSLT, entidades, Java, Xalan ... para download de patch e comentários.
fonte
Quando você usa o seguinte (sem
disable-output-escaping
!), Você obtém um único espaço sem interrupção:<xsl:text> </xsl:text>
fonte
disable-output-escaping
dissoAs folhas de estilo XSLT devem ser XML bem formado. Como
" "
não é uma das cinco entidades XML predefinidas , não pode ser incluída diretamente na folha de estilo. Portanto, retornar à sua solução" "
é um substituto perfeito que" "
você deve usar.Exemplo:
fonte
você também pode usar:
lembre-se do amplificador após o & ou você receberá uma mensagem de erro
fonte
&nbsp;
(supondo que você pretenda que o ponto-e-vírgula esteja lá), que será renderizado como
, e não como `` (nb-space).Eu estava tentando exibir bordas em uma célula vazia em uma tabela HTML. Meu velho truque de usar espaço sem quebra em células vazias não estava funcionando no xslt. Eu usei quebra de linha com o mesmo efeito. Mencionei isso apenas no caso de você estar tentando usar o espaço ininterrupto para fornecer algum conteúdo a uma célula da tabela 'vazia' para ativar as bordas da célula.
fonte
Tente usar
Mas isso depende do processador XSLT que você está usando: a especificação XSLT não requer que os processadores XSLT a convertam em "
".fonte
Embora a resposta já tenha sido fornecida por @brabster e outros.
Eu acho que uma solução mais reutilizável seria:
fonte