Pergunta

Qual é a melhor forma de incluir uma entidade html em XSLT?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

este retorna uma XsltParseError

Foi útil?

Solução

Você pode usar a seção CDATA

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

ou você pode descrever em local DTD:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

ou apenas usar &#160; em vez de &nbsp;

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>&nbsp;&minus;30&deg;</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 &nbsp; 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">&amp;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 &nbsp; não é uma determinada entidade em XML, XSLT ou como ele é em HTML.

Você poderia simplesmente usar o caractere unicode que &nbsp; significa: &#160;

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 &#160;, 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">&amp;#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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top