2015-08-09 2 views
7

Wie schreibt man ein XML-Dokument der Version 1.1 in Java? Java scheint nur Version 1.0 zu unterstützen.XML 1.1-Dokumente können nicht in Java geschrieben werden

ich die OutputKeys.VERSION Ausgang Eigenschaft versuchte, mit, wie unten gezeigt, aber das hatte keine Wirkung:

DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = fact.newDocumentBuilder(); 
Document doc = db.newDocument(); 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
transformer.setOutputProperty(OutputKeys.VERSION, "1.1"); 

DOMSource source = new DOMSource(doc); 
StringWriter writer = new StringWriter(); 
StreamResult result = new StreamResult(writer); 
transformer.transform(source, result); 

System.out.println(writer.toString()); 
//still produces a 1.0 XML document 

ich den obigen Code in der folgenden JVMs getestet:

  • Linux: OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1 ~ deb7u1)
  • Linux: Java (TM) SE Runtime Environment (build 1.8.0_25-b17)

Ich möchte, wenn möglich, keine externen Bibliotheken hinzufügen. Vielen Dank.

+0

Welche Java-Version verwenden Sie? Ich benutze Java 8 und für mich funktioniert dein Code ... EDIT: es funktioniert auch mit 7. – Glorfindel

+0

Java 7. Vielleicht hängt es von der JVM-Implementierung ab? Ich verwende OpenJDK. Hier ist die Ausgabe von meiner 'java -version': OpenJDK Laufzeitumgebung (IcedTea 2.5.5) (7u79-2.5.5-1 ~ deb7u1) OpenJDK Server VM (build 24.79-b02, gemischter Modus) – Michael

+0

@ Glorfindel Don Ich weiß nicht, ob es wichtig ist, aber "OutputKeys.STANDALONE" auf "yes" zu setzen, hat auch keine Wirkung. – Michael

Antwort

3

Ich verwende jdk1.8.0_40-b26 unter Linux, wenn ich Ihren Code ausführen ich erhalten:

<?xml version="1.0" encoding="UTF-8"?> 

Aber wenn ich xalan-2.7.2 in meiner Maven Abhängigkeit hinzufügen, ich erhalte:

Die Erklärung ist, dass die xml librairies gebündelt mit dem jdk ziemlich alt sind und die beste Lösung ist, externe Bibliotheken zu verwenden.

die documentation Lese, sehen wir, dass die Versionen in der Referenz-Implementierung enthalten sein sollten

Xerces Version 2.6.2 + (Xerces Version 2.6.2 mit kontrollierten Fehlerbehebung)

XSLTC Version 2.6 wieder 0,0 + (XSLTC Version 2.6.0, mit kontrolliertem Bug-Fixes, basierend auf dem Xalan 2.6.0 Release)

nur um zu bestätigen, füge ich xalan-2.6.0 in meiner maven Abhängigkeit, und ich erhalte

Wenn Sie also XML 1.1 verwenden möchten, müssen Sie die neuesten externen XML-Bibliotheken wie Xerces 2.11 und Xalan 2.7.2 verwenden.

Verwandte Themen