JDOM XMLOutputter Sonderzeichen
maike
- java
Hallo,
ich lese in Java mit Hilfe von JDOM ein XML-Dokument ein, verändere es und speichere es wieder ab. Dabei gibt es ein Problem mit den Sonderzeichen. In dem Original XML-Dokument verwende ich Entities, um die Zeichen abzubilden. Nachdem das Dokument später wieder abgespeichert wird, sind alle Sonderzeichen durch ein ? dargestellt.
Also habe ich eine Methode geschrieben, die vor der Ausgabe alle Sonderzeichen durch das entsprechende Entitie ersetzt.
Dabei gibt es allerdings auch Probleme. Wenn ich z.B. "ä" durch & auml; dann steht im XML-Dokument & amp;auml;
(natürlich ohne Leerzeichen, nur hier zur Darstellung...)
Die Methode output der Klasse XMLOutputter ersetzt anscheinend automatisch das & Zeichen durch & amp;
Wie kann ich das vermeiden?
Hängt das vielleicht mit dem Encoding zusammen?
Wichtig ist evtl. noch, dass das Java-Programm unter Linux läuft!!
Hier der Code:
Element rootElem = new Element("Document");
Document doc = new Document(rootElem);
....
// Elemente einfügen und Text durch Entity ersetzen
//
FileWriter out = new FileWriter(pfad);
out.write("<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?\n");
out.write("<!DOCTYPE Document [\n");
out.write("<!ENTITY auml '&auml;'>\n");
out.write("<!ENTITY ouml '&ouml;'>\n");
out.write("<!ENTITY uuml '&uuml;'>\n");
out.write("<!ENTITY Auml '&Auml;'>\n");
out.write("<!ENTITY Ouml '&Ouml;'>\n");
out.write("<!ENTITY Uuml '&Uuml;'>\n");
out.write("<!ENTITY szlig '&szlig;'>\n");
out.write("<!ENTITY amp '&'>\n");
out.write("<!ENTITY lt '&lt;'>\n");
out.write("<!ENTITY nbsp '&nbsp;'>\n");
out.write("<!ENTITY egrave '&egrave;'>\n");
out.write("<!ENTITY agrave '&agrave;'>\n");
out.write("<!ENTITY eacute '&eacute;'>\n");
out.write("<!ENTITY aacute '&aacute;'>\n");
out.write("<!ENTITY deg '&deg;'>\n");
out.write("<!ENTITY Ntilde '&Ntilde;'>\n");
out.write("<!ENTITY sup2 '&sup2;'>\n");
out.write("]>\n");
XMLOutputter xmlOut = new XMLOutputter();
xmlOut.setOmitDeclaration(true);
xmlOut.setOmitEncoding(true);
xmlOut.output(doc, out);
out.close();
Hoffe mir kann jemand helfen,
Danke,
Gruß Maike
Hallo maike,
In XML gibt es ja nur benannte Entities für < > ' " &
Alle anderen Zeichen musst Du entweder direkt ins Dokument schreiben (richtigen Zeichensatz angeben) oder Du verwendest Zeichenreferenzen.
ÿ
Was willst Du eigentlich hiermit erreichen?
<!ENTITY auml '&auml;'>
Damit erreichst Du, dass ä im Dokumentinhalt durch ä ersetzt wird. So eine endlos rekursive Definition dürfte kaum Zulässig sein.
Die notwendigen Ersetzungen nimmt der XMLOutputter ja offensichtlich schon vor, allerdings gibt standardmäßig er utf-8 aus.
Du musst dem XMLOutputter bei der Instanzierung ein Format-Objekt (http://www.jdom.org/docs/apidocs/index.html) übergeben, dass iso-8859-1 als Encoding festlegt, damit der XMLOutputter alle Zeichen, die nicht in diesem Zeichensatz sind, durch entsprechende Zeichenreferenzen ersetzen kann.
Außerdem musst Du für den FileWriter ebenfalls iso-8859-1 als Zeichensatz festlegen, damit die Zeichen richtig codiert werden.
Statt dem FileWriter könntest Du natürlich auch einen FileOutputStream verwenden und XML-Deklaration und Doctype vom XMLOutputter erzeugen lassen.
Grüße
Daniel