工作需要,要生成xml文件,所以做了个小demo分享一下。
看代码吧~ main()里面没什么好说的 该写的都写了public static void main(String[] args) {
//调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
Element theBook=null, theElem=null, root=null;
try {
factory.setIgnoringElementContentWhitespace(true);//是否删除空格 false true
DocumentBuilder db=factory.newDocumentBuilder(); //获取解析器
//指定路径 获取xml文件的document对象
File f = new File("src/book.xml");
Document xmldoc=db.parse(f);
root=xmldoc.getDocumentElement();
//添加 元素(节点)
theBook=xmldoc.createElement("book1");
theElem=xmldoc.createElement("name");
theElem.setTextContent("平凡的世界");
theBook.appendChild(theElem);
theElem=xmldoc.createElement("price");
theElem.setTextContent("¥55.0");
theBook.appendChild(theElem);
theElem=xmldoc.createElement("conment");
theElem.setTextContent("推荐大家看看这本书");
theBook.appendChild(theElem);
root.appendChild(theBook);
printXML(xmldoc);//打印至Console
saveXml("new_book.xml", xmldoc);//保存生成 xml文件
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
方法:printXML() 打印到Console
1.下面的方法中得到的transFactory对象调用newTransformer()方法得到一个Transformer对象:
Transformer transformer=transFactory. newTransformer();
Transformer类在javax.xml.transform包中。
将被变换的Document对象封装到一个DOMSource对象中:
DOMSource domSource=new DOMSource(document);
DOMSource类在javax.xml.transform.dom包中。
将变换得到XML文件对象封装到一个StreamResult对象中:
File file=new File("XXX.xml");
FileOutputStream out=new FileOutputStream(file);
StreamResult xmlResult=new StreamResult(out);
StreamResult类在javax.xml.transform.stream包中。
最后,Transformer 对象transformer 调用transform方法实施变换:
transformer.transform(domSource, xmlResult);
2.transformer.setOutputProperty("indent","yes");这里比较无语 只给了 是否设置缩进 只有yes|no
你选择的是yes也就等于格式化了xml,效果如下:
默认缩进的是0
关于这个缩进问题 我还没处理好呢
这里给个参考链接吧:http://blog.csdn.net/yes1983/article/details/2487455
(ps:要是不在乎这个的话可以放弃这一步)public static void printXML(Node node) {
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("encoding", "gb2312");//指定编码
transformer.setOutputProperty("indent", "yes"); //是否设置缩进
DOMSource source=new DOMSource();
source.setNode(node);
StreamResult result=new StreamResult();
result.setOutputStream(System.out);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
方法:saveXml() 保存生成xml文件public static void saveXml(String fileName, Document doc) {
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");//是否设置缩进
DOMSource source=new DOMSource();
source.setNode(doc);
StreamResult result=new StreamResult();
result.setOutputStream(new FileOutputStream(fileName));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
运行结果:
生成的新的xml文件内容:
最后我想说一下编码 开始的时候一定要统一编码 不然生成的xml文件会乱码的!
由最代码官方编辑于2014-8-14 16:44:29