无法用Java编写XML 1.1文档

前端之家收集整理的这篇文章主要介绍了无法用Java编写XML 1.1文档前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你如何用 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中测试了上面的代码

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

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

解决方法

我在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 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)

为了确认,我在我的maven依赖项中添加了xalan-2.6.0,然后我再次获得

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

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

猜你在找的Java相关文章