Pergunta
Qual é a melhor forma de incluir uma entidade html em XSLT?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
este retorna uma XsltParseError
Solução
Você pode usar a seção CDATA
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
ou você pode descrever em local DTD:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
ou apenas usar  
em vez de
Outras dicas
Também é possível estender a abordagem da 2ª parte do aku resposta e receba todos os caracteres conhecidos referências disponíveis, 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> −30°</xsl:text>
Existe uma certa diferença no resultado se comparado ao <xsl:text disable-output-escaping="yes">
abordagem.O último, vai produzir literais de seqüência de caracteres como
para todos os tipos de saída, até mesmo para <xsl:output method="text">
, e isso pode acontecer de ser diferentes do que você poderia desejar...Pelo contrário, a obtenção de entidades definidas para o modelo XSLT através de <!DOCTYPE ... <!ENTITY ...
irá sempre produzir saída consistente com sua xsl:output
configurações.
Ele pode ser sábio usar uma entidade local de resolução para manter o XSLT motor de busca de definições de entidade de caractere a partir da Internet.JAXP ou explícita Xalan-J usuários podem precisar de um patch para o Xalan-J para usar a resolução corretamente.Ver o meu blog XSLT, entidades, Java, Xalan... para o patch download e comentários.
uma outra possibilidade para usar entidades html de dentro xslt é o seguinte:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
O XSLT apenas lida com as cinco entidades por padrão: lt
, gt
, apos
, quot
, e amp
.Todos os outros precisam ser definido como @Aku menciona.
este retorna uma XsltParseError
Sim, e a razão para isso é que
não é uma determinada entidade em XML, XSLT ou como ele é em HTML.
Você poderia simplesmente usar o caractere unicode que
significa:  
Agora que não há Unicode, geralmente é contra-produtivo para usar o nome entidades de caracteres.Eu recomendo usar o caractere Unicode para um espaço não-separável, em vez de uma entidade, apenas por essa razão.Como alternativa, você pode usar o entity  
;, em vez de a entidade nomeada.Usando o nome de entidades torna o XML dependente de uma linha ou DTD externo.
Eu encontrei todas essas soluções produziu um  personagem no espaço em branco.
Usando <xsl:text> </xsl:text>
resolveu o problema para mim;mas <xsl:text>#x20;</xsl:text>
pode funcionar bem.
Obrigado por sua informação.Eu tenho escrito um breve post no blog baseado no que funcionou para mim quando eu estava fazendo a transformação XSLT em um modelo de Dynamicweb CMS.
O blog está aqui: Como adicionar entidades de modelos XSLT.
/Sten Hougaard
É necessário usar o entity #x160;
Eu não tive sorte com o DOCTYPE abordagem de Aku.
O que funcionou para mim no MSXML transforma em um Windows 2003 server, foi
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
Uma espécie de híbrido de acima.Graças Stackoverflow contribuintes!
Um caractere de espaço entre etiquetas de texto deve ser o suficiente.