输出文档:
方法1:
使用一个 什么也不做的转换器(do-nothing
transformation);为了在输出中包含一个DOCTYPE节点,还要设置输出属性SYSTEM和PUBLIC标识符。具体步骤是:
//构造一个
do-nothing
transformation
Tranformer t =
TranformerFactory.newInstance().newTransformer();
//设置output的属性,来获得一个DOCTYPE节点
t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
systemIdentifier);
t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,
publicIdentifier);
//设置缩进
t.setOutputProperty(OutputKeys.INDENT,
“yes”);
t.setOutputProperty(OutputKeys.METHOD,
“xml”);
t.setOutputProperty(“{http://xml.apache.org/xslt}indent-amount”,”2”);
//申请一个do-nothing
transformation并向一个文件中输出
t.transform(new DOMSource(doc), new
StreamResult(new FileOutputStream(file)));
方法2:
使用LLserializer接口:
DOMImplementation impl =
doc.getImplementation();
DOMImplementationLS implLS =
(DOMImplementationLS)impl.getFeature(“LS”, “3.0”);
LSSerializer ser =
implLS.createLSSerializer();
//如果想要设置空格和换行:
ser.getDomConfig().serParameter(“format-pretty-print”,
true);
//可以将document转换成一个字符串:
String ser = ser.writeToString(doc);
//如果想要直接向文件里写入:
LSOutput out = implLS.createLSOutput();
out.setEncoding(“UTF-8”);
out.setByteStream(Files.newOutputStream(path));
ser.write(doc, out);
使用StAX写输出XML文档:
//从一个输出流(OutputStream)上构造一个XMLStreamWriter:
XMLOutputFactory factory =
XMLOutputFactory.newInstance();
XMLStreamWriter writer =
factory.createXMLStreamWriter(out);
//为了处理XML头部:
writer.writeStreamDocument();
writer.writeStartElement(name);
//添加属性:
writer.writeAttribute(name,value);//这里可以再次调用writeStartElement后者写字符:
writer.writeCharacters(text);
//当写完所有的子节点后,调用:
writer.EndElement(name);//这样将关闭当前元素
//如果要写一个没有子节点的元素,则:
writer.wirteEmptyElement(name);
//最后文档的最后,调用:
writer.writeEndDocument();//这会使所有打开的元素关闭