如何用Java编写XML 1.1版文档? Java似乎只支持1.0版本。
我尝试使用OutputKeys.VERSION
输出属性,如下所示,但这没有效果:
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
我在以下JVM中测试了上面的代码:
如果可能的话,我不必包含任何外部库。谢谢。
答案 0 :(得分:3)
我在Linux下使用jdk1.8.0_40-b26,如果我运行你的代码,我会获得:
<?xml version="1.0" encoding="UTF-8"?>
但是如果我在maven依赖项中添加xalan-2.7.2,我会得到:
<?xml version="1.1" encoding="UTF-8"?>
解释是与jdk捆绑在一起的xml库很老,最好的办法就是使用外部库。
阅读documentation,我们看到参考实现中包含的版本应为
Xerces版本2.6.2 +(带有受控错误修复的Xerces版本2.6.2)
XSLTC版本2.6.0 +(XSLTC版本2.6.0,受控制的错误修复,基于Xalan 2.6.0版本)
为了确认,我在我的maven依赖项中添加了xalan-2.6.0,我再次获得
<?xml version="1.0" encoding="UTF-8"?>
因此,如果您想使用XML 1.1,则必须使用最新的外部xml库,如Xerces 2.11和Xalan 2.7.2。