无法使用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运行时环境(build 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库是非常古老的,最好的解决方案是使用外部库。

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

    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。

    链接地址: http://www.djcxy.com/p/28003.html

    上一篇: Unable to write XML 1.1 documents in Java

    下一篇: Spark Error: Could not initialize class org.apache.spark.rdd.RDDOperationScope