java xml dom读写_javaXML文件的写入之DOM和DOM4J

1.DOM篇

首先是DOM的操作方法,字符串数据可以从对象中读,例如上篇提到的Person对象,这里为了方便直接手写。

1 packagecom.dom.node;2

3 importjavax.xml.parsers.DocumentBuilder;4 importjavax.xml.parsers.DocumentBuilderFactory;5 importjavax.xml.transform.OutputKeys;6 importjavax.xml.transform.Transformer;7 importjavax.xml.transform.TransformerFactory;8 importjavax.xml.transform.dom.DOMSource;9 importjavax.xml.transform.stream.StreamResult;10 importorg.w3c.dom.Document;11 importorg.w3c.dom.Element;12

13 public classDomXml {14 public static voidmain(String[] args) {15 try{16 //第一步:创建DOM树

17 DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();18 DocumentBuilder db =dbf.newDocumentBuilder();19 Document document =db.newDocument();20 document.setXmlStandalone(true);21 //第二步:完善树结构22 //创建节点

23 Element bookstore = document.createElement("bookstore");24 Element book1 = document.createElement("book");25 Element book2 = document.createElement("book");26 Element name1 = document.createElement("name");27 Element price1 = document.createElement("price");28 Element when1 = document.createElement("when");29 Element name2 = document.createElement("name");30 Element price2 = document.createElement("price");31 Element when2 = document.createElement("when");32 //设置节点的属性、内容

33 book1.setAttribute("from", "China");34 book2.setAttribute("from", "America");35 name1.setTextContent("三国演义");36 price1.setTextContent("¥89");37 when1.setTextContent("2017版");38 name2.setTextContent("JavaScript高级程序设计");39 price2.setTextContent("$18");40 when2.setTextContent("2016");41 //将子节点添加到父节点

42 book1.appendChild(name1);43 book1.appendChild(price1);44 book1.appendChild(when1);45 book2.appendChild(name2);46 book2.appendChild(price2);47 book2.appendChild(when2);48 bookstore.appendChild(book1);49 bookstore.appendChild(book2);50 document.appendChild(bookstore);51 //第三步:将树结构导入book.xml文件中

52 TransformerFactory tff =TransformerFactory.newInstance();53 Transformer tf =tff.newTransformer();54 tf.setOutputProperty(OutputKeys.INDENT, "yes");//节点换行

55 tf.transform(new DOMSource(document), new StreamResult("file/book.xml"));56 } catch(Exception e) {57 e.printStackTrace();58 }59 }60

61 }

下面是生成的XML文件

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 三国演义

4 ¥89

5 2017版

6

7

8 JavaScript高级程序设计

9 $18

10 2016

11

12

DOM方法生成的xml文件就是这样的,没有进行格式化处理。

2.DOM4J篇

操作方法:

1 packagecom.dom.node;2

3 importjava.io.FileOutputStream;4 importorg.dom4j.Document;5 importorg.dom4j.DocumentHelper;6 importorg.dom4j.Element;7 importorg.dom4j.io.OutputFormat;8 importorg.dom4j.io.XMLWriter;9

10 public classDom4JwriteXML {11 public static voidmain(String[] args) {12 try{13 //第一步:创建文档对象document

14 Document document =DocumentHelper.createDocument();15 //第二步:由外到内添加子节点

16 Element bookstore = document.addElement("bookstore");17 Element book1 = bookstore.addElement("book");18 Element book2 = bookstore.addElement("book");19 Element name1 = book1.addElement("name");20 Element price1 = book1.addElement("price");21 Element when1 = book1.addElement("when");22 Element name2 = book2.addElement("name");23 Element price2 = book2.addElement("price");24 Element when2 = book2.addElement("when");25 //第三步:设置节点的属性、内容

26 book1.addAttribute("from", "China");27 book2.addAttribute("from", "America");28 name1.setText("三国演义");29 price1.setText("¥89");30 when1.setText("2017版");31 name2.setText("JavaScript高级程序设计");32 price2.setText("$18");33 when2.setText("2016");34 //设置输出格式

35 OutputFormat format =OutputFormat.createPrettyPrint();36 //设置文件编码

37 format.setEncoding("GBK");38 //将写好的文档document输出到指定XML文件中并关闭XMLWriter对象

39 XMLWriter xml = new XMLWriter(new FileOutputStream("file/books.xml"),format);40 //有时候我们的内容text中会有诸如/、>之类的,我们要告诉XML,不要转义这些字符

41 xml.setEscapeText(false);42 xml.write(document);43 xml.close();44 } catch(Exception e) {45 e.printStackTrace();46 }47 }48 }

输出的XML文件

1 <?xml version="1.0" encoding="GBK"?>

2

3

4

5 三国演义

6 ¥89

7 2017版

8

9

10 JavaScript高级程序设计

11 $18

12 2016

13

14

还是这样看起来比较舒服吧。

总结:

我们不难看出,在XML文件的写入方法上,DOM方法要先用creatElement()方法创建节点,然后使用appendChild()

方法将节点添加到父节点,而DOM4J方法将两步做了一个综合---addElement()方法,并且在其他方面也较DOM方法

做了拓展,更重要的是性能优于DOM方法。

下面一张图就四种方法的速度方面做了对比:

2441f5710a09968ce16d0f8c8cadd3f8.png

SAX由于是采用事件驱动模式,对内存耗费较小,速度较快,

但是,正因为如此,SAX在对数据操作上灵活性大打折扣,

所以当下,开发者更倾向于使用DOM4J的写入方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值