2009-07-20 3 views
0

Ich verwende dom4j, um meine XML zu parsen. Lassen Sie uns sagen, dass ich so etwas wie dieses:dom4j konvertiert Text in Sonderzeichen

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar>&#402;</bar> 
</foo> 

Wenn auf dem Wert des „bar“ Knoten suchen, es gibt mir den besonderen Charakter zurück, wie dargestellt durch „& # 402;“

Gibt es eine Möglichkeit, dies zu verhindern und nur das tatsächliche Stück Text zu lesen?

Antwort

1

Das tatsächliche Bit des Textes ist &#402;? Sie müssen dem Undersand als &amp; dann entgehen.

+0

Ich habe versucht, aber beim Schreiben auf eine Ausgabe XML, möchte ich immer noch nur das "&" Symbol und nicht die "&" Text anzeigen. Natürlich konnte ich einfach die Ausgabedatei analysieren und "&" in einem Texteditor manuell in "&" umwandeln, aber ich hatte gehofft, dass ich das nicht machen müsste. – digiarnie

+1

Nun, es gibt einen Unterschied zwischen Lesen und Schreiben. Zum Schreiben können Sie setEscapeText (false) auf org.dom4j.io.XMLWriter aufrufen, um zu schreiben, was immer Sie wörtlich haben. Wenn Sie das tun, denken Sie daran, dass Ihr Lese-/Schreibzyklus das Dokument ändert, so dass Sie vorsichtig sein müssen. – ChssPly76

2

Wenn der Wert des bar Knotens < oder> oder & für sich allein enthalten würde, würde es den Parser beschädigen. Um sich dagegen zu schützen, sollten Sie alle Daten auf dem Weg entschlüsseln und auf dem Weg nach draußen wieder entschlüsseln.

Damit wird Ihr Dokument in:

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar>&amp;#402;</bar> 
</foo> 

Es ist zu saugen, aber das ist XML für Sie.

+0

+1 für den endgültigen XML-Kommentar – digiarnie

0

Wenn Sie diese numerischen Zeichenreferenzen wie &#nnnn oder Zeichenentität wie &something zu bewahren, während verweist auf die XML-Datei zu lesen-schreiben, können Sie:

  1. Pre-Prozess der Eingangsstrom ersetzt & zu z [$AMPERSAND_CHARACTER$]
  2. Ändern Sie die XML über dom4j
  3. Post-Prozess der Rückseite Substitution des Ausgangsstrom

Siehe the example of code machen.