1.DOM篇

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

 package com.dom.node;

 import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element; public class DomXml {
public static void main(String[] args) {
try {
// 第一步:创建DOM树
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
document.setXmlStandalone(true);
// 第二步:完善树结构
// 创建节点
Element bookstore = document.createElement("bookstore");
Element book1 = document.createElement("book");
Element book2 = document.createElement("book");
Element name1 = document.createElement("name");
Element price1 = document.createElement("price");
Element when1 = document.createElement("when");
Element name2 = document.createElement("name");
Element price2 = document.createElement("price");
Element when2 = document.createElement("when");
// 设置节点的属性、内容
book1.setAttribute("from", "China");
book2.setAttribute("from", "America");
name1.setTextContent("三国演义");
price1.setTextContent("¥89");
when1.setTextContent("2017版");
name2.setTextContent("JavaScript高级程序设计");
price2.setTextContent("$18");
when2.setTextContent("2016");
// 将子节点添加到父节点
book1.appendChild(name1);
book1.appendChild(price1);
book1.appendChild(when1);
book2.appendChild(name2);
book2.appendChild(price2);
book2.appendChild(when2);
bookstore.appendChild(book1);
bookstore.appendChild(book2);
document.appendChild(bookstore);
// 第三步:将树结构导入book.xml文件中
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");// 节点换行
tf.transform(new DOMSource(document), new StreamResult("file/book.xml"));
} catch (Exception e) {
e.printStackTrace();
}
} }

下面是生成的XML文件

 <?xml version="1.0" encoding="UTF-8"?><bookstore>
<book from="China">
<name>三国演义</name>
<price>¥89</price>
<when>2017版</when>
</book>
<book from="America">
<name>JavaScript高级程序设计</name>
<price>$18</price>
<when>2016</when>
</book>
</bookstore>

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

2.DOM4J篇

操作方法:

 package com.dom.node;

 import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; public class Dom4JwriteXML {
public static void main(String[] args) {
try {
//第一步:创建文档对象document
Document document = DocumentHelper.createDocument();
//第二步:由外到内添加子节点
Element bookstore = document.addElement("bookstore");
Element book1 = bookstore.addElement("book");
Element book2 = bookstore.addElement("book");
Element name1 = book1.addElement("name");
Element price1 = book1.addElement("price");
Element when1 = book1.addElement("when");
Element name2 = book2.addElement("name");
Element price2 = book2.addElement("price");
Element when2 = book2.addElement("when");
//第三步:设置节点的属性、内容
book1.addAttribute("from", "China");
book2.addAttribute("from", "America");
name1.setText("三国演义");
price1.setText("¥89");
when1.setText("2017版");
name2.setText("JavaScript高级程序设计");
price2.setText("$18");
when2.setText("2016");
//设置输出格式
OutputFormat format = OutputFormat.createPrettyPrint();
//设置文件编码
format.setEncoding("GBK");
//将写好的文档document输出到指定XML文件中并关闭XMLWriter对象
XMLWriter xml = new XMLWriter(new FileOutputStream("file/books.xml"),format);
//有时候我们的内容text中会有诸如/、>之类的,我们要告诉XML,不要转义这些字符
xml.setEscapeText(false);
xml.write(document);
xml.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

输出的XML文件

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

 <bookstore>
<book from="China">
<name>三国演义</name>
<price>¥89</price>
<when>2017版</when>
</book>
<book from="America">
<name>JavaScript高级程序设计</name>
<price>$18</price>
<when>2016</when>
</book>
</bookstore>

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

总结:

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

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

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

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

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

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

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

javaXML文件的写入之DOM和DOM4J的更多相关文章

  1. 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j

    解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...

  2. sax/dom/jdom/dom4j的区别

    sax/dom/jdom/dom4j的区别[转] 博客分类: xml   网上能够查到很多的4种解析方式的区别,我再做一下摘录和总结,顺带给自己做个备份. SAX sax分析器在对xml文档进行分析时 ...

  3. 使用面向对象对XML进行解析:dom和dom4j的用法

    这是一个比较简单的例子,主要是运用面向对象的思想,对XML文件进行解析,用dom和dom4j方法 <?xml version="1.0" encoding="utf ...

  4. 解析xml文件的几种技术与Dom4j与sax之间的对比

    一.解析xml文件的几种技术:dom4j.sax.jaxb.jdom.dom 1.dom4j dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的 ...

  5. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  6. Android从网络某个地址下载文件、写入SD卡

    首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //url ...

  7. Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据

    背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...

  8. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  9. Android 建立文件夹、生成文件并写入文本文件内容

    一.首先添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">& ...

随机推荐

  1. MySQL最佳实践

    一.核心军规         - 不在数据库做运算:cpu计算务必移至业务层         - 控制单表数据量:单表记录控制在1000w         - 控制列数量:字段数控制在20以内     ...

  2. 【翻译】Sencha Cmd中脚本压缩方法之比较

    概述 为什么要修改默认设置 YUI压缩 Google Closure编译器 UglifyJS 案例研究Ext JS 6示例应用程序 注意事项 自定义JS压缩 小结 概述 这么多年来,Web开发人员都被 ...

  3. 12.1、Libgdx的图像之持续性和非持续性渲染

    (官网:www.libgdx.cn) Libgdx在默认情况下,渲染现成调用render()方法进行持续性渲染.频率取决于你的硬件设备. 有时候有些游戏中并不需要持续性的渲染,为了省电,可以关掉持续性 ...

  4. 软考之路--J2SE,从HelloWorld到传世代码

    "Hello World"程序指的是只在计算机屏幕上输出"Hello, World!"(意为"世界,你好!")这行字符串的计算机程序.hel ...

  5. 【IOS 开发】Object-C 入门 Xcode 环境详解

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...

  6. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

    JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...

  7. ubuntu 开发环境配置及安装 nodejs

    ubuntu 开发环境配置及安装 nodejs 1 安装nodejs $ sudo apt-get install build-essential $ sudo apt-get install gcc ...

  8. 《java入门第一季》之Date类案例,算一算你的恋爱纪念日

    想算你和你对象谈了多久了,还在用笔算吗,是不是很头疼?写个程序算一算吧!会变得如此简单. import java.text.ParseException; import java.text.Simpl ...

  9. mysql 字符集更改与导入数据

    mysql 字符集更改与导入数据 mysqldb经常有中文乱码的问题,解决起来很恼火.其实所有开发和数据库统一为一种编码就可以了: utf8. 1 下面修改mysql的编码 1) 永久修改. 在/et ...

  10. Linux学习笔记 --服务器优化

    Linux服务器优化 序言: 服务器操作建议 1.严格按照目录规范操作服务器 2.远程服务器不允许关机 3.不要在服务器访问高峰运行高负载命令 4.远程配置防火墙时,不要把自己踢出服务器 一.禁用不必 ...