How do you write an XML version 1.1 document in Java? Java only seems to support version 1.0.
I tried using the OutputKeys.VERSION
output property, as shown below, but that had no effect:
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
I tested the above code in the following JVMs:
I'd rather not have to include any external libraries, if possible. Thank you.
I'm using jdk1.8.0_40-b26 under Linux, if I run your code I obtain:
<?xml version="1.0" encoding="UTF-8"?>
But if I add xalan-2.7.2 in my maven dependencies, I obtain:
<?xml version="1.1" encoding="UTF-8"?>
The explanation is that the xml librairies bundled with the jdk are quite old and the best solution is to use external librairies.
Reading the documentation, we see that the versions included in the reference implementation should be
Xerces version 2.6.2 + (Xerces version 2.6.2 with controlled bug fixes)
XSLTC version 2.6.0 + (XSLTC version 2.6.0 , with controlled bug fixes, based on the Xalan 2.6.0 release)
Just to confirm, I add xalan-2.6.0 in my maven dependencies, and I obtain again
<?xml version="1.0" encoding="UTF-8"?>
So if you want to use XML 1.1, you have to use recent external xml libraries like Xerces 2.11 and Xalan 2.7.2.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With