XML-Datei erzeugen+Sonderzeichen erlauben

Saskia21

Mitglied
Hi Leute ich hab da mal ne Frage
Ich schreibe für jede Datenbanktabelle eine XML-Datei. Es funktioniert auch alles einwandfrei, nur wenn im Text Sonderzeichen sind spinnt er rum.
Java:
File f = new File( timeStampXML+"_"+tabellenName + ".xml" );
               
OutputStream fout= new FileOutputStream(f);
OutputStream bout= new BufferedOutputStream(fout);
OutputStreamWriter fw = new OutputStreamWriter(bout, "UTF-8");

Wie mache ich das, dass Sonderzeichen erlaubt sind?
Beispielfehlermeldung
Java:
Name beginnt mit einem ungültigen Zeichen. Fehler beim Bearbeiten der Ressource 'file:///C:/Dokumente und Einstellungen...
 
<tabelle>coDokTypen[inaktiv = 0 AND (AnzeigeIR <> 0 OR AnzeigeIA <> 0) ORDER BY DokTyp];stRechtZugriff[bCo...

LG
 
XML-eigene Zeichen sind generell nicht in XML PCDATA Bereichen erlaubt. Dafür hast du die Möglichkeit diese zu maskieren.

XML:
<daten>XML & Zeichen mit "besonderer" Bedeutung</daten>

sollte maskiert so aussehen:

XML:
<daten>XML &amp; Zeichen mit &quot;besonderer&quot; Bedeutung</daten>

Wenn die XML Daten schon in einem DOM Tree vorhanden sind kannst du diese ja mit der für die genutzt DOM Libary existierenden XMLPrinter Klasse ausgeben lassen. In dem Fall übernimmt der XMLPrinter die Maskierung der XML-eigenen Zeichen.

Hier noch ein Beispielcode für die JDOM Libary:

Java:
public void storeModel(Document model, OutputStream outputStream) throws IOException {
	Format format = Format.getPrettyFormat();
	format = format.setEncoding("UTF-16LE");
	format = format.setIndent("\t");

	XMLOutputter outputter = new XMLOutputter(format);

	outputter.output(model, outputStream);
}

Diese Methode schreibt ein org.jdom.Document namens docTree in den gegebenen OuputStream mit einer für Menschen gut lesbaren Formatierung. Das org.jdom.output.Format gibt das Dokument mit UTF-16LE (UCS-2) Encoding und mit Tabulatoren als Einrückungzeichen aus.


Eine weitere Möglichkeit das Problem zu umgehen wäre den Test mit den XML-eigenen Zeichen als CDATA zu definieren. Das würde wie folgt aussehen:

XML:
<daten><![CDATA[XML & Zeichen mit "besonderer" Bedeutung]]></daten>

Hierbei werden die Sonderzeichen, welche nicht vom XML Parser interpretiert werden sollen in '<![CDATA[' und ']]>' notiert. Inwiefern das funktioniert weiss ich nicht, da ich es bisher nicht getestet habe.

Für weitere Details solltest du :google: konsultieren.
 
Zuletzt bearbeitet von einem Moderator:
Zurück