Escape de aspas duplas em XML


101

Existe um caractere de escape para aspas duplas em xml? Quero escrever uma tag como:

<parameter name="Quote = " ">

mas se eu colocar ", isso significa que a string terminou. Preciso de algo assim (c ++):

printf("Quote = \" ");

Há um caractere a ser escrito antes da aspa dupla para escapar dela?





Resposta curta: &quot; Resto da história ...
kjhughes

Respostas:



118

Aqui estão os caracteres comuns que precisam ser escapados em XML, começando com aspas duplas:

  1. aspas duplas ( ") são escapadas para&quot;
  2. E comercial ( &) é escapado para&amp;
  3. aspas simples ( ') são escapadas para&apos;
  4. menos que ( <) é escapado para&lt;
  5. maior que ( >) é escapado para&gt;

3
Incorreta; & apos; não é um caractere XML válido. É um caractere HTML válido - que é SGML e um SUPERconjunto de XML.
Stefan Steiger

Embora esse seja um ponto válido, a maioria dos analisadores XML modernos com os quais trabalhei o estão aceitando como um caractere válido.
Dariusz G. Jagielski

& quot; não é interpretado corretamente pelo Android quando a string está entre aspas duplas. Neste caso, a resposta E-max é a única a funcionar.
Softlion

@StefanSteiger está nesta lista
OrangeDog

@Dariusz G. Jagielski: Embora eu não tenha nada contra os analisadores XML modernos - se você trabalhar com XML em um banco de dados (por exemplo, ms / pg), verá que nem todo software usa analisadores xml modernos. Especialmente quando é um software complexo de décadas. Dito isso, se todos usassem um analisador xml moderno, seria uma coisa boa. No entanto, se esse código estiver profundamente integrado em softwares complexos mais antigos, será muito difícil substituí-lo (enquanto retém 100% da compatibilidade com versões anteriores). As desvantagens de C ou de não usar injeção de dependência, por assim dizer.
Stefan Steiger,

27

Outros responderam em termos de como lidar com o escape específico neste caso.

Uma resposta mais ampla é não tentar fazer você mesmo. Use uma API XML - ela está disponível para quase todas as plataformas de programação modernas existentes.

APIs XML irão lidar com coisas assim para você automaticamente, tornando muito mais difícil errar. A menos que você mesmo esteja escrevendo uma API XML, raramente precisará se preocupar com detalhes como este.


11
Não posso dizer que concordo. Parece tolice pensar que deveríamos depender tanto de APIs para nos abstrair a ponto de nem precisarmos entender como ler e escrever XML. A API XML provavelmente não vai te ajudar muito quando você alimenta um documento malformado e ele explode. Alguém terá que consertar os dados para carregá-los.
Christopher Painter

@ChristopherPainter Dado o tamanho do padrão XML, duvido que haja muitas pessoas que realmente o entendam. Agora, muitos pensam que sim, mas na verdade não o fazem.
Reintegrar Monica de

2
Bem, você tem que começar de algum lugar. É claro que em nosso setor apenas reclamamos que XML é uma merda e recomeçamos com algo como JSON. Em seguida, o processo se repete.
Christopher Painter de

14

Resposta nova e aprimorada a uma pergunta antiga e frequente ...

Quando escapar aspas duplas em XML

Aspas duplas ( ") podem aparecer sem escape :

  • Em conteúdo textual XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Em atributos XML delimitados por aspas simples ( '):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>

    Observação: mudar para aspas simples ( ') também não requer escape:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>

Aspas duplas ( ") devem ter escape :

  • Em atributos XML delimitados por aspas duplas:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>

Resultado

Aspas duplas ( ") devem ser evitadas como &quot;em XML apenas em contextos muito limitados.


7

Não, não há um caractere de escape como tal, em vez disso, você pode usar &quot;ou até mesmo <![CDATA["]]>representar o "caractere.



2

Em C ++, você pode usar a API EscapeXML ATL. Esta é a maneira correta de lidar com caracteres especiais ...


1

Você pode tentar usar uma barra invertida seguida por um "u" e, em seguida, o valor Unicode para o caractere, por exemplo, o valor Unicode das aspas duplas é

"-> U + 0022

Portanto, se você o definisse como parte do texto em XML no android, seria algo assim,

<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

Isso produziria um texto no TextView mais ou menos como este

"Mostrando aspas duplas"

Você pode encontrar o Unicode da maioria dos símbolos e caracteres aqui www.unicode-table.com/en


Você pode encontrar Unicode da maioria dos símbolos e caracteres aqui. Unicode-table.com/en
E-max
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.