我有一个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文件中的一些元素而不转换它?
答案 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
,您无法指定缩进量或线宽。所以,如果这很重要,那么这个解决方案应该有所帮助。