Esci dal carattere virgolette doppie in XML


101

C'è un carattere di escape per le virgolette doppie in xml? Voglio scrivere un tag come:

<parameter name="Quote = " ">

ma se metto ", significa che la stringa è terminata. Ho bisogno di qualcosa del genere (c ++):

printf("Quote = \" ");

C'è un carattere da scrivere prima delle doppie virgolette per sfuggirle?





Risposta breve: il &quot; resto della storia ...
kjhughes

Risposte:



118

Ecco i caratteri comuni di cui è necessario eseguire l'escape in XML, iniziando con virgolette doppie:

  1. le virgolette doppie ( ") vengono sottoposte a escape&quot;
  2. e commerciale ( &) è sottoposto a escape&amp;
  3. virgolette singole ( ') sono sottoposte a escape&apos;
  4. a meno di ( <) viene eseguito l'escape&lt;
  5. maggiore di ( >) è sottoposto a escape&gt;

3
non corretta; & APOS; non è un carattere XML valido. È un carattere HTML valido, che è SGML e un SUPERset di XML.
Stefan Steiger

Anche se questo è un punto valido, la maggior parte dei moderni parser XML con cui ho lavorato lo accettano come carattere valido.
Dariusz G. Jagielski

& quot; non viene interpretato correttamente da Android quando la stringa è racchiusa tra virgolette doppie. In questo caso la risposta E-max è l'unica a funzionare.
Softlion

@StefanSteiger è in questa lista
OrangeDog

@ Dariusz G. Jagielski: Anche se non ho nulla contro i moderni parser XML - se lavori con XML in un database (ad esempio ms / pg), vedrai che non tutti i software utilizzano i moderni parser xml. Soprattutto quando si tratta di software complesso vecchio di decenni. Detto questo, se tutti usassero un moderno parser xml, sarebbe una buona cosa. Tuttavia, se quel codice è profondamente integrato in un software complesso più vecchio, diventa molto difficile sostituirlo (pur mantenendo la compatibilità con le versioni precedenti del 100%). Gli svantaggi di C o di non usare l'iniezione di dipendenza, per così dire.
Stefan Steiger

27

Altri hanno risposto in termini di come gestire la fuga specifica in questo caso.

Una risposta più ampia è non provare a farlo da soli. Usa un'API XML: ce ne sono molte disponibili per quasi tutte le moderne piattaforme di programmazione esistenti.

Le API XML gestiranno automaticamente cose come questa, rendendo molto più difficile sbagliare. A meno che tu non stia scrivendo un'API XML da solo, raramente dovresti preoccuparti di dettagli come questo.


11
Non posso dire di essere d'accordo. Sembra sciocco pensare che dovremmo essere così dipendenti dalle API per astrarci al punto che non abbiamo nemmeno bisogno di capire come leggere e scrivere XML. L'API XML probabilmente non ti aiuterà molto quando gli dai da mangiare un documento non valido e questo esplode. Qualcuno dovrà correggere i dati per caricarli.
Christopher Painter

@ChristopherPainter Date le dimensioni dello standard XML, dubito che ci siano molte persone che lo capiscono davvero. Ora ci sono molti che pensano di sì, ma in realtà non lo fanno.
Ripristina Monica il

2
Bene, devi iniziare da qualche parte. Ovviamente nel nostro settore ci lamentiamo solo del fatto che XML fa schifo e ricominciamo con qualcos'altro come JSON. Quindi il processo si ripete.
Christopher Painter

14

Nuova risposta migliorata a una vecchia domanda frequente ...

Quando sfuggire alle virgolette doppie in XML

Le virgolette doppie ( ") possono apparire senza caratteri di escape :

  • Nel contenuto testuale XML:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • Negli attributi XML delimitati da virgolette singole ( '):

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

    Nota: anche il passaggio alle virgolette singole ( ') non richiede caratteri di escape:

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

Le virgolette doppie ( ") devono essere precedute da caratteri di escape :

  • Negli attributi XML delimitati da virgolette doppie:

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

Linea di fondo

Le virgolette doppie ( ") devono essere sottoposte a escape come &quot;in XML solo in contesti molto limitati.


7

No, non esiste un carattere di fuga in quanto tale, invece puoi usare &quot;o anche <![CDATA["]]>per rappresentare il "personaggio.



2

In C ++ puoi usare l'API ATL EscapeXML. Questo è il modo corretto di gestire i caratteri speciali ...


1

Puoi provare a utilizzare una barra rovesciata seguita da una "u" e quindi il valore Unicode per il carattere, ad esempio il valore Unicode delle virgolette doppie è

"-> U + 0022

Pertanto, se lo stessi impostando come parte del testo in XML in Android, sarebbe simile a questo,

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

Questo produrrebbe un testo in TextView più o meno simile a questo

"Visualizzazione di virgolette doppie"

Puoi trovare l'unicode della maggior parte dei simboli e dei caratteri qui www.unicode-table.com/en


Puoi trovare l'unicode della maggior parte dei simboli e dei caratteri qui unicode-table.com/en
E-max
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.