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

时间:2016-05-08 20:31:43

标签: java xml

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

我想在类型为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,然后我想继续该程序的流程,我必须将Document doc转换回File文件。

有效的方法是什么?或者什么是更好的解决方案来获取xml文件中的一些元素而不转换它?

2 个答案:

答案 0 :(得分:10)

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

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);

答案 1 :(得分:0)

使用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.*包,未记录,因此generally is not seen是首选方式。但是,对于javax.xml.transform.OutputKeys,您无法指定缩进量或线宽。所以,如果这很重要,那么这个解决方案应该有所帮助。