Frage

Ich habe eine Datei, die im XML-Format (besteht nur aus Wurzel Start- und End-Tags, und Kindern der Wurzel). Die Textelemente der Kinder enthalten kaufmännisches Symbol &. In XML ist es nicht erlaubt dieses Symbol, um gültig zu sein, das Dokument zu haben, und wenn ich die Datei mit dem DOM-API in Java und einen XML-Parser zu verarbeiten versucht, erhielt ich Fehler Parsen. Deshalb habe ich ersetzt und mit &, und ich verarbeitet, um die Datei erfolgreich: ich die Werte der Textelemente in unterschiedlichen Textdateien zu extrahieren hatte.

Wenn ich diese neu erstellte Textdateien geöffnet, erwartete ich & zu sehen, aber es war & statt. Warum ist das? Ich gespeichert habe den Text in Textdateien ohne Verlängerung (meine ursprüngliche Datei mit dem XML-Format auch nicht XML-Erweiterung hat), und ich habe einfach & im Text der neuen Datei, egal wie ich die Datei öffnen: als txt oder als XML-Datei (dies sind nur einige der Optionen in meinem XML-Editor). Was passiert genau? Ist Java (?) Konvertieren & automatisch auf &? Oder gibt es einige Standard-Codierung? Nun, & steht für &, und ich nehme an, dass eine „unsichtbare“ automatische Konvertierung, aber ich bin verwirrt, wann und wie dies geschieht. Hier sind Beispiele für meine Originaldatei und die extrahierte Datei, die ich erhalte, nachdem ich die Original-Datei mit Java verarbeitet:

Das ist meine "negative.review" Datei im XML-Format:

<review>
<review_text>
I will not wear it as it is too big &amp; looks funny on me. 
</review_text>
</review>

Das ist meine extrahierte Datei "negative_1":

I will not wear it as it is too big & looks funny on me. 

Für mich ist es wichtig, die ursprünglichen Daten zu haben, wie es ist (ohne dabei irgendwelche Wandlungen / Ersatz), also dachte ich, dass ich die extrahierte Datei „negative_1“ zu verarbeiten &amp; Umwandlung zurück zu &. Wie Sie sehen, so scheint es, muss ich dies nicht tun. Aber ich verstehe nicht, warum :(.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Der Grund ist einfach:. Die XML-Datei wirklich enthält ein "&" Zeichen

Es ist nur anders dargestellt (das heißt, es wird „entkommen“), weil ein echter "&" auf seine eigene Umbrüche XML-Dateien, wie Sie gesehen haben. Lesen Sie den entsprechenden Abschnitt in der XML 1.0-Spezifikation: "2.4 Zeichendaten und Markup" . Es ist nur ein paar Zeilen, aber es erklärt das Problem ganz gut.

XML ist eine Darstellung von Daten (!). Glauben Sie nicht, es als eine Textdatei. Beispiel:

Sie möchten die Zeichenfolge speichern "17 <20" in einer XML-Datei. Am Anfang kann man nicht, da die „<“ als Starttag Klammer reserviert ist. So wäre dies ungültig:

<xml>17 < 20</xml>

Lösung: Sie beschäftigen Charakter auf dem speziellen / reservierten Charakter zu entkommen, nur für die Mittel, um die Gültigkeit der Datei beibehalten:

<xml>17 &lt; 20</xml>

Für alle praktischen Zwecke das obige Snippet folgende Daten enthält (in JSON Darstellung dieses Mal):

{
  "xml": "17 < 20"
}

Dies ist, warum Sie die echte "&" in Ihrem Postprocessing zu sehen. Es war in genau der gleichen Weise entkommen, aber es ist bedeutet gleich geblieben die ganze Zeit.

Das obige Beispiel erklärt auch, warum muss die "&" speziell behandelt werden: Es selbst Teil des XML-Flucht-Mechanismus ist. Es markiert den Beginn einer Escape-Sequenz, wie in "&lt;". Deshalb muss er sich maskiert werden (mit "&amp;", wie Sie getan haben).

Andere Tipps

Jeder XML-Parser wird implizit Entitäten übersetzen wie &amp;, &lt;, &gt;, in die entsprechenden Zeichen, als Teil des Prozesses, die Datei zu parsen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top