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?

ufukgun
fonte

Respostas:

173

Experimente isto:

&quot;
Andrew Hare
fonte
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;
Alex Muriithi
fonte
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.

Jon Skeet
fonte
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.

kjhughes
fonte
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.

Matt Howells
fonte
5

Se você só precisa experimentar algo rapidamente, aqui está uma solução rápida e suja. Use aspas simples para o valor do atributo :

<parameter name='Quote = " '>
Brad Cupit
fonte
2

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

Neven
fonte
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

E-max
fonte
Você pode encontrar Unicode da maioria dos símbolos e caracteres aqui. Unicode-table.com/en
E-max