Como posso escapar de amplificadores em XML para que eles sejam renderizados como entidades em HTML?

tenho um texto XML que quero apresentar numa página HTML. Este texto contém um ampersand, que eu quero representar em sua representação de entidade: &.

Como é que escapo a este ampersand no XML de origem? Eu tentei {[[0]}, mas isto é descodificado como o verdadeiro carácter ampersand (&), que é inválido no HTML .

então eu quero escapar dele de tal forma que ele será renderizado como & na página web que usa a saída XML.

 452
Author: Community, 2009-08-25

12 answers

Quando o seu XML contém &, Isto irá resultar no texto &.

Quando você usar isso em HTML, isso será renderizado como &.

 354
Author: Wim ten Brink, 2016-08-30 14:43:32

De acordo com §2.4 da especificação XML 1. 0, deve ser capaz de utilizar &.

Tentei, mas isto não é permitido.

Tens a certeza que não é uma questão diferente? O XML define isso explicitamente como a maneira de escapar dos amplificadores.
 183
Author: John Feminella, 2017-10-04 03:10:02

O carácter & é ele próprio um carácter de escape em XML, pelo que a solução é concatená-lo e um equivalente decimal Unicode para &, garantindo assim que não existem erros de processamento em XML. Isto é, substitua o carácter & por &.

 111
Author: trouble, 2018-06-14 13:43:13

Etiquetas de CDATA?

     <![CDATA[
       This is some text with ampersands & other funny characters. >>
     ]]>
 58
Author: scragar, 2009-08-25 14:14:29

&amp; deve funcionar muito bem, a Wikipedia tem uma lista de entidades predefinidas em XML .

 39
Author: nikc.org, 2009-08-25 14:14:19
No meu caso, tive de mudar para %26. Precisava de escapar numa URL. Então, não resultou comigo. A função urlencode muda & para %26. Desta forma, nem o XML nem o mecanismo de URL do navegador reclamaram sobre o URL.
 9
Author: Serhat Akay, 2017-04-08 15:29:49

Tentei & amp, mas não funcionou. Baseado na resposta de Wim ten Brink eu tentei & amp e funcionou.

Um dos meus colegas desenvolvedores sugeriu que eu usasse & e isso funcionou independentemente de quantas vezes ele pode ser renderizado.

 4
Author: mcampos, 2017-04-08 15:27:41

&amp; é a forma de representar um ampersand na maioria das seções de um documento XML.

Se quiser mostrar o XML no HTML, terá de criar primeiro o XML codificado correctamente (o que implica mudar & para &amp;) e depois usar isso para criar HTML devidamente codificado (o que envolve mudar de novo & para &amp;). Isso resulta em:

&amp;amp;

Para uma explicação mais completa da codificação XML, ver:

Que personagens eu preciso para escapar em XML documentos?

 3
Author: Riley Major, 2017-05-23 12:02:49

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> vai resultar.

 2
Author: Rick, 2011-03-02 01:58:30
Que tal usar o unicode? Funciona comigo nos meus ficheiros XML android. Se surgirem problemas, avisem-me.
 2
Author: Scott Biggs, 2017-04-09 18:57:36

Uma questão relacionada é como codificar o conteúdo de elementos XML quando esse conteúdo contém um ampersand -- se o XML faz parte de um URI submetido com uma acção GET. (Deixando de lado a sabedoria de tal API -- era algo com que eu tinha que lidar hoje.) Eu tentei tudo o que foi mencionado acima, e a única coisa que realmente funcionou foi {[[0]} o %26 era necessário para codificar o primeiro caractere na codificação XML para ampersand. O amp; a seguir ao %26 era necessário porque a porção XML of the URI was being loaded into an XML document server-side. Nesse cenário divertido, foi necessário agregar as metodologias de codificação.

 0
Author: StackOverflowUser, 2016-12-21 03:23:07

Considere se o seu XML se parece com o que está em baixo.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

Você não pode usar o {[[2]} diretamente como ele lança um erro. Nesse caso, pode usar &#60;&#62; em substituição disso.

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

Clique aqui para ver todos os códigos.

 0
Author: Sarath Avanavu, 2017-04-08 15:30:33