StAX - Einstellung der Version und Kodierung mit XMLStreamWriter

7

Ich verwende StAX zum Erstellen von XML-Dateien und validiere dann die Datei mit und XSD.

Beim Erstellen der XML-Datei wird ein Fehler angezeigt:

%Vor%

Hier ist das Code-Snippet:

%Vor%

Ich verwende diesen Code unter Unix. Kann jemand die Version und den Kodierungsstil einstellen?

    
Anurag 31.05.2010, 12:45
quelle

4 Antworten

13

Ich würde versuchen, das createXMLStreamWriter() auch mit einem Ausgabeparameter zu verwenden.

[EDIT] Versucht, ändert er die createXMLStreamWriter Zeile:

%Vor%

[EDIT 2] Hat einen etwas komplexeren Test für den Rekord gemacht:

%Vor%     
PhiLho 31.05.2010 14:11
quelle
4

Das sollte funktionieren:

%Vor%     
chris 01.06.2010 19:46
quelle
2

Aus dem Code ist es schwer zu wissen, aber wenn Sie sich auf die Standard-Stax-Implementierung verlassen, die JDK 1.6 bietet (Sun sjsxp), würde ich ein Upgrade empfehlen, um Woodstox . Es ist bekannt, weniger Buggy als Sjsxp, unterstützt die gesamte Stax2 API und wurde aktiv entwickelt und unterstützt (während Sun Version wurde nur geschrieben und es gab eine begrenzte Anzahl von Bugfixes).

Aber der Fehler in Ihrem Code ist dies:

%Vor%

Sie verlassen sich auf die Standard-Plattform-Codierung (die muss CP-1252, Windows?). Sie sollten die von Ihnen verwendete Codierung immer explizit angeben. Stream Writer prüft nur, ob Sie etwas Gefährliches tun, und entdeckte eine Inkonsistenz, die ein beschädigtes Dokument verursachen kann. Ziemlich smart, was eigentlich darauf hindeutet, dass dies nicht der Standard-Stax-Prozessor ist. : -)

(Die andere Antwort weist ebenfalls auf eine korrekte Problemumgehung hin, indem Sie einfach OutputStream und Encoding übergeben, damit XMLStreamWriter das Richtige tun kann)

    
StaxMan 13.01.2011 19:10
quelle
0

Wenn Sie das Standardpaket XMLStreamWriter im Paket mit dem Oracle JRE / JDK verwenden, sollten Sie immer

verwenden
  • Erstelle ein XMLStreamWriter und setze explizit die Zeichencodierung: xmlOutputFactory.createXMLStreamWriter(in, encoding)
  • Starten Sie das Dokument und setzen Sie explizit die Kodierung: xmlStreamWriter.writeStartDocument(encoding, version) . Der Schreiber ist nicht schlau genug, sich an die Codierung zu erinnern, die beim Erstellen des Schreibers festgelegt wurde. Es überprüft jedoch, ob diese Codierungen identisch sind. Siehe Code unten.

Auf diese Weise sind Ihre Dateicodierung und XML-Deklaration immer synchron. Obwohl die Angabe der Codierung in der XML-Deklaration optional ist, empfiehlt es sich, XML immer zu spezifizieren.

Dies ist der Code aus der Oracle (Sun) Implementierung (Sjsxp):

%Vor%     
rmuller 03.07.2015 18:54
quelle

Tags und Links