将 org.w3c.dom.Document 转换为 File 文件

2022-09-04 20:07:27

我有一个xml文件作为Java中的对象,作为org.w3c.dom.Document doc,我想将其转换为文件文件。如何将类型文档转换为文件?谢谢

我想在文件类型为File的现有xml文件(标准dita)中添加元数据元素。我知道一种向文件添加元素的方法,但是我必须将文件转换为org.w3c.dom.Document。我用 loadXML 方法做到了这一点:

private Document loadXML(File f) throws Exception{ 
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
return builder.parse(f);

之后,我更改了org.w3c.dom.Document,然后我想继续程序的流程,并且我必须将文档文档转换回File文件。

什么是有效的方法来做到这一点?或者,在不转换xml文件的情况下获取xml文件中的某些元素的更好解决方案是什么?


答案 1

可以使用 Transformer 类将整个 XML 内容输出到文件,如下所示:

Document doc =...

// write the content into xml file
    DOMSource source = new DOMSource(doc);
    FileWriter writer = new FileWriter(new File("/tmp/output.xml"));
    StreamResult result = new StreamResult(writer);

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    transformer.transform(source, result);

答案 2

在 JDK 1.8.0 中,一个简短的方法是使用内置的 XMLSerializer(它是在 JDK 1.4 中作为 Apache Xerces 的分支引入的)

import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

Document doc = //use your method loadXML(File f)

//change Document

java.io.Writer writer = new java.io.FileWriter("MyOutput.xml");
XMLSerializer xml = new XMLSerializer(writer, null);
xml.serialize(doc);

使用类型的对象来配置输出,例如:OutputFormat

OutputFormat format = new OutputFormat(Method.XML, StandardCharsets.UTF_8.toString(), true);
format.setIndent(4);
format.setLineWidth(80);
format.setPreserveEmptyAttributes(true);
format.setPreserveSpace(true);
XMLSerializer xml = new XMLSerializer(writer, format);

请注意,这些类来自未记录的包,因此通常不被视为首选的做事方式。但是,例如,您不能指定缩进量或线宽。因此,如果这很重要,那么此解决方案应该会有所帮助。com.sun.*javax.xml.transform.OutputKeys


推荐