【问题标题】:Java produce version "1.1" in XML header with transformerJava 在带有转换器的 XML 标头中生成版本“1.1”
【发布时间】:2019-12-17 22:03:11
【问题描述】:

我想在标头中生成 1.1 作为版本的 xml 文件,因为在解析 1.0 版本的 xml 文件时我得到 SaxparserExceptions:

"Character reference "&#3" is an invalid XML character". 

当我手动更改标题时,我没有收到任何错误。通过 outputkeys 更改版本似乎不起作用。该文件仍然有错误的标题:

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

示例代码:

    try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.newDocument();

        TransformerFactory transformerFactory = TransformerFactory
                .newInstance();
        Transformer transformer = transformerFactory
                .newTransformer();

        transformer.setOutputProperty(
                OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
        transformer.setOutputProperty(OutputKeys.VERSION, "1.1");
        transformer
                .setOutputProperty(
                        "{http://xml.apache.org/xslt}indent-amount",
                        "2");


        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(
                 "processed_.xml");
        transformer.transform(source, result);

    } catch (TransformerConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TransformerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

【问题讨论】:

  • XML 1.1 在野外很少见——也许您更应该修复您的 XML?那个奇怪的“”是从哪里来的?
  • 我无法修复“我的”XML,因为内容来自庞大的爬网数据集。修复它需要一段时间。

标签: java xml version domdocument transformer


【解决方案1】:

Xalan 可能不支持 XML 1.1。试试撒克逊语。

【讨论】:

  • 就是这样!只需在我的 Maven 存储库中添加 Saxon 依赖项,然后在我的 Java 代码中设置 System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
【解决方案2】:

doc.setXmlVersion("1.1");对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2018-03-18
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多