无法用Java编写XML 1.1文档

Mic*_*ael 8 java xml

你如何用Java编写XML 1.1版文档?Java似乎只支持1.0版.

我尝试使用OutputKeys.VERSIONoutput属性,如下所示,但是没有效果:

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
Run Code Online (Sandbox Code Playgroud)

我在以下JVM中测试了上面的代码:

  • Linux:OpenJDK运行时环境(IcedTea 2.5.5)(7u79-2.5.5-1~deb7u1)
  • Linux:Java(TM)SE运行时环境(版本1.8.0_25-b17)

如果可能的话,我宁愿不必包含任何外部库.谢谢.

Ort*_*kni 5

我在Linux下使用jdk1.8.0_40-b26,如果我运行你的代码,我会得到:

<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

但是如果我在我的 Maven 依赖项中添加 xalan-2.7.2,我将获得:

<?xml version="1.1" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)

解释是与 jdk 捆绑的 xml 库相当旧,最好的解决方案是使用外部库。

阅读文档,我们发现参考实现中包含的版本应该是

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"?>
Run Code Online (Sandbox Code Playgroud)

因此,如果您想使用 XML 1.1,则必须使用最新的外部 xml 库,例如 Xerces 2.11 和 Xalan 2.7.2。