如何在 java 中使用 DOM 解析器在 XML 文件中声明 doctype、xml 版本和编码?

How to declare doctype ,xml version and encoding in XML file using DOM parser in java?

抱歉,我不知道如何尝试做这样的事情。

public void writeXML(String tableName) {
    try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement(tableName);
        doc.appendChild(rootElement);

        for(Map m: rows){
            Element parent = doc.createElement((String) m.get("ownerNode"));
            rootElement.appendChild(parent);
            for(String s: colNames){
                String key = (String) m.get(s);
                System.out.println(key);
                Element innerNode = doc.createElement(s);
                innerNode.appendChild(doc.createTextNode((String) m.get(s)));
                parent.appendChild(innerNode);
            }
        }



        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory
                .newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(tableName + ".xml"));

        // Output to console for testing
        // StreamResult result = new StreamResult(System.out);

        transformer.transform(source, result);

        System.out.println("File saved!");

    } catch (ParserConfigurationException pce) {
    } catch (TransformerException tfe) {
    }

}

这是我编写 xml 正文的代码,所以如果有人能帮我添加 XML 版本、编码、文档类型和 DTD 参考,我将不胜感激 DOM解析器

显示默认行为和更改方法的代码:

String inputXml = "<root><value>Test</value></root>";

// Build DOM tree for input XML
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
Document document = domBuilder.parse(new InputSource(new StringReader(inputXml)));

// Print DOM XML using default settings
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(System.out));

System.out.println();   System.out.println();

// Print DOM XML using specific settings
document.setXmlVersion("1.1");
transformer.setOutputProperty(OutputKeys.ENCODING, "windows-1252");
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "ROOT-VALUE");
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "RootValue.dtd");
transformer.transform(new DOMSource(document), new StreamResult(System.out));

输出(使用Java1.8.0_51)

<?xml version="1.0" encoding="UTF-8" standalone="no"?><root><value>Test</value></root>

<?xml version="1.1" encoding="windows-1252" standalone="no"?><!DOCTYPE root PUBLIC "ROOT-VALUE" "RootValue.dtd">
<root><value>Test</value></root>