Escape-Anführungszeichen in XML

101

Gibt es ein Escapezeichen für ein doppeltes Anführungszeichen in XML? Ich möchte ein Tag schreiben wie:

<parameter name="Quote = " ">

aber wenn ich "setze, dann bedeutet das, dass der String beendet ist. Ich brauche so etwas (c ++):

printf("Quote = \" ");

Gibt es ein Zeichen, das vor dem doppelten Anführungszeichen geschrieben werden muss, um ihm zu entkommen?

Ufukgun
quelle

Antworten:

172

Versuche dies:

&quot;
Andrew Hare
quelle
116

Hier sind die allgemeinen Zeichen, die in XML maskiert werden müssen, beginnend mit doppelten Anführungszeichen:

  1. doppelte Anführungszeichen ( ") werden in maskiert&quot;
  2. kaufmännisches Und ( &) wird mit maskiert&amp;
  3. einfache Anführungszeichen ( ') werden in maskiert&apos;
  4. weniger als ( <) wird maskiert&lt;
  5. größer als ( >) wird maskiert&gt;
Alex Muriithi
quelle
3
Falsch; & apos; ist kein gültiges XML-Zeichen. Es ist ein gültiges HTML-Zeichen - SGML und eine SUPER-Menge von XML.
Stefan Steiger
Während dies ein gültiger Punkt ist, akzeptieren die meisten modernen XML-Parser, mit denen ich gearbeitet habe, ihn als gültiges Zeichen.
Dariusz G. Jagielski
& quot; wird von Android nicht richtig interpretiert, wenn die Zeichenfolge in doppelte Anführungszeichen gesetzt ist. In diesem Fall funktioniert nur die E-max-Antwort.
Softlion
@ StefanSteiger es ist auf dieser Liste
OrangeDog
@Dariusz G. Jagielski: Ich habe zwar nichts gegen moderne XML-Parser - wenn Sie mit XML in einer Datenbank arbeiten (z. B. ms / pg), werden Sie feststellen, dass nicht jede Software moderne XML-Parser verwendet. Besonders wenn es sich um komplexe, jahrzehntealte Software handelt. Das heißt, wenn jeder einen modernen XML-Parser verwenden würde, wäre dies eine gute Sache. Wenn dieser Code jedoch tief in ältere komplexe Software integriert ist, ist es sehr schwierig, ihn zu ersetzen (unter Beibehaltung der 100% igen Abwärtskompatibilität). Die Nachteile von C oder sozusagen, keine Abhängigkeitsinjektion zu verwenden.
Stefan Steiger
27

Andere haben in Bezug auf den Umgang mit der spezifischen Flucht in diesem Fall geantwortet.

Eine umfassendere Antwort ist, nicht zu versuchen, es selbst zu tun. Verwenden Sie eine XML-API - für nahezu jede moderne Programmierplattform gibt es eine Menge.

XML-APIs erledigen solche Dinge automatisch für Sie, was es viel schwieriger macht, Fehler zu machen. Wenn Sie nicht selbst eine XML-API schreiben, sollten Sie sich selten um solche Details kümmern müssen.

Jon Skeet
quelle
11
Ich kann nicht sagen, dass ich damit einverstanden bin. Es scheint töricht zu denken, dass wir uns so sehr auf APIs verlassen sollten, um uns so weit zu abstrahieren, dass wir nicht einmal verstehen müssen, wie man XML liest und schreibt. Die XML-API wird Ihnen wahrscheinlich nicht viel helfen, wenn Sie ein fehlerhaftes Dokument einspeisen und es explodiert. Jemand muss die Daten reparieren, damit sie geladen werden.
Christopher Painter
@ChristopherPainter Angesichts der Größe des XML-Standards bezweifle ich, dass es sehr viele Menschen gibt, die ihn tatsächlich verstehen. Jetzt gibt es viele, die denken, dass sie es tun, aber sie tun es wirklich nicht.
Stellen Sie Monica
2
Nun, du musst irgendwo anfangen. Natürlich beschweren wir uns in unserer Branche nur darüber, dass XML scheiße ist und beginnen mit etwas anderem wie JSON. Dann wiederholt sich der Vorgang.
Christopher Painter
13

Neue, verbesserte Antwort auf eine alte, häufig gestellte Frage ...

Wann wird ein doppeltes Anführungszeichen in XML vermieden?

Double quote ( ") kann erscheinen, ohne zu entkommen :

  • In XML-Textinhalten:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • In XML-Attributen, die durch einfache Anführungszeichen ( ') begrenzt sind:

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

    Hinweis: Das Umschalten auf einfache Anführungszeichen ( ') erfordert auch kein Entkommen:

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

Double quote ( ") muss maskiert werden :

  • In XML-Attributen, die durch doppelte Anführungszeichen begrenzt sind:

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

Endeffekt

Double quote ( ") darf wie &quot;in XML nur in sehr begrenzten Kontexten maskiert werden.

kjhughes
quelle
7

Nein, es gibt kein Escape-Zeichen als solches, stattdessen können Sie das Zeichen verwenden &quot;oder sogar <![CDATA["]]>darstellen ".

Matt Howells
quelle
2

In C ++ können Sie die EscapeXML ATL-API verwenden. Dies ist der richtige Umgang mit Sonderzeichen ...

Neven
quelle
1

Sie können versuchen, einen Backslash gefolgt von einem "u" und dann den Unicode-Wert für das Zeichen zu verwenden, z. B. den Unicode-Wert des doppelten Anführungszeichens

"-> U + 0022

Wenn Sie es als Teil von Text in XML in Android festlegen würden, würde es ungefähr so ​​aussehen:

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

Dies würde einen Text in der Textansicht ungefähr so ​​erzeugen

"Doppelte Anführungszeichen anzeigen"

Den Unicode der meisten Symbole und Zeichen finden Sie hier www.unicode-table.com/de

E-max
quelle
Sie können Unicode der meisten Symbole und Zeichen hier finden unicode-table.com/de
E-max