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?
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)
Wenn Sie das Standardpaket XMLStreamWriter
im Paket mit dem Oracle JRE / JDK verwenden, sollten Sie immer
XMLStreamWriter
und setze explizit die Zeichencodierung: xmlOutputFactory.createXMLStreamWriter(in, encoding)
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%