dom4J 学习
Java给我们提供了标准的W3C接口实现,已完成对XML的处理。主要有两大类,分别是DOM操作,SAX解析。DOM可以将XML加载到内存中,对XML进行方便的增删查改。由于是将整个XML都加载到内存中,所以一般说来只适合于处理比较小的XML文件。而SAX方式克服了DOM的对文件大小限制,它采用先序的方式遍历整个XML文件。也就是说SAX是有一定的顺序的执行的,一个节点一个节点的加载。这样即使XML文档很大,但不需要将其整个加载到内存中,所以SAX可以处理较大的XML文件。但SAX的缺点是不能对XML文档进行修改,只能顺序读取。
综上所诉,DOM解析和SAX解析二者各有优缺点,相互弥补。
但是毕竟我们希望能有一个统一的方式或工具能够集合DOM和SAX的优点,这样我们可以抛开底层,而专注于工具使用,从而对XML进行方便的操作,从而DOM4J就应运而生了。下面我们从几个方面来讲解DOM4J的用法。
1 在内存中创建一个Document对象。
Document document = DocumentHelper.createDocument();
2 为Document对象生成根节点
Element root = document.addElement("admins");
3 为Document生成子节点。这里我们用一个List<Admin>对象,将List中每个Admin对象加载到document对象中.使用Document的addElement()方法增加根节点。然后调用节点方法addAttribute()增加属性。调用addElement()方法增加子节点。调用addText()方法增加文本节点。
for (Admin item : allAdmins)
{
Element admin = root.addElement("admin"); admin.addAttribute("aid", item.getAid());
admin.addElement("rid").addText(String.valueOf(item.getRid()));
admin.addElement("type").addText(String.valueOf(item.getType()));
admin.addElement("lastdate").addText(String.valueOf(item.getLastdate()));
admin.addElement("flag").addText(String.valueOf(item.getFlag()));
}
4 将内存中的document保存到本地文件中。使用OutputFormat设置XML格式,使用XMLWriter将内存的document写到磁盘上。
public static void saveToFile(String path, Document document) throws Exception
{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
OutputStream os = new FileOutputStream(path);
XMLWriter xmlWriter = new XMLWriter(os, format);
xmlWriter.write(document);
}
5 将本地文件读取到内存中。使用SAXReader。
public static Document loadFromFile(String path) throws Exception
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(path));
return document;
}
6 对document进行更新。使用getRoot()方法可以获取根节点。使用elements()方法可以获取所有指定名称的元素节点,以List<Element>的方式返回。使用remove方法可以删除一个节点。
public static void changeStructure(Document document)
{
Element root = document.getRootElement();
List<Element> allElements = root.elements("admin");
for(Element item : allElements)
{
Attribute attributeAid = item.attribute("aid");
item.addElement(attributeAid.getName()).addText(attributeAid.getValue());
item.remove(attributeAid); }
}
完成代码可以参考下面:
package xmlDom.main; import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*; import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import xmlDom.dbc.DatabaseConnection;
import xmlDom.vo.*; public class Hello
{
public static void main(String[] args) throws Exception
{
String path = "C:\\D\\code\\resource\\newAdmin.xml";
// List<Admin> allAdmins = findAllAdmins();
// Document document = convertToDocument(allAdmins);
// saveToFile(path, document); Document document = loadFromFile(path);
changeStructure(document);
saveToFile(path, document); System.out.println("main done//~");
} public static void changeStructure(Document document)
{
Element root = document.getRootElement();
List<Element> allElements = root.elements("admin");
for(Element item : allElements)
{
Attribute attributeAid = item.attribute("aid");
item.addElement(attributeAid.getName()).addText(attributeAid.getValue());
item.remove(attributeAid); }
} public static void saveToFile(String path, Document document) throws Exception
{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
OutputStream os = new FileOutputStream(path);
XMLWriter xmlWriter = new XMLWriter(os, format);
xmlWriter.write(document);
} public static Document loadFromFile(String path) throws Exception
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(path));
return document;
} private static Document convertToDocument(List<Admin> allAdmins) throws Exception
{
Document document = DocumentHelper.createDocument(); Element root = document.addElement("admins");
for (Admin item : allAdmins)
{
Element admin = root.addElement("admin"); admin.addAttribute("aid", item.getAid());
admin.addElement("rid").addText(String.valueOf(item.getRid()));
admin.addElement("type").addText(String.valueOf(item.getType()));
admin.addElement("lastdate").addText(String.valueOf(item.getLastdate()));
admin.addElement("flag").addText(String.valueOf(item.getFlag()));
} return document;
} /**
* 从数据库中将数据查询出来,然后转换成内存中的XML文档
*
* @return
* @throws Exception
*/
public static List<Admin> findAllAdmins() throws Exception
{
List<Admin> allAdmins = new ArrayList<Admin>();
DatabaseConnection dbc = new DatabaseConnection();
Connection conn = dbc.getConnection();
String sql = " SELECT aid,rid,type,lastdate,flag FROM admin ";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next())
{
Admin admin = new Admin();
admin.setAid(rs.getString("aid"));
admin.setRid(rs.getInt("rid"));
admin.setType(rs.getInt("type"));
admin.setLastdate(rs.getDate("lastdate"));
admin.setFlag(rs.getInt("flag"));
allAdmins.add(admin);
}
return allAdmins;
}
}
dom4J 学习的更多相关文章
- dom4j学习总结(一)
dom4j学习总结(一) (一)创建Document的基本操作 /** * xml基本操作 */ public void BaseOperation(){ //创建一个document Doc ...
- dom4j学习
在使用xml读写的过程中,用到了dom4j,也算是一个比较主流的xml包了,在使用的过程中,将学习经历记录一下,以后查阅也比较方便. 首先是在pom中添加依赖,在Maven的中心库搜索后选择了该包: ...
- dom4j 学习总结
Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platfo ...
- Dom4j 学习笔记
dom4j 是一种解析 XML 文档的开放源代码 XML 框架.dom4j下载地址 本文主要记载了一些简单的使用方法. 一.xml文件的解析 dom4j既可以解析普通的xml文件,也可以解析一个Inp ...
- Dom4j学习笔记
一.Loading XML Data 以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象.一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行 ...
- dom4j处理带命名空间的XML-使用XPath(转)
dom4j处理带命名空间的XML-使用XPath 博客分类: XML XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 使 ...
- XML学习笔记(2)--dom4j操作XML
1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...
- java学习笔记DOM4J解析(7)
DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型. DOM4J是开源组织提供的一个免费的.强大的XML解析工具,如果开发者需要在项 ...
- JavaWeb学习笔记——DOM4J
下载的地址为:http://www.dom4j.org/dom4j-1.6.1/ import java.io.File; import java.io.FileOutputStream; impor ...
随机推荐
- win32自绘按钮,使用GDI+(二)
一.解决上一篇的两个问题. 1.按钮背景透明 方法是,在绘制按钮之前,向按钮的父窗口发生WM_CTLCOLORBTN消息.该消息返回一个画刷句柄,系统使用该画刷句柄画出按钮的背景.所以我们在处理这个消 ...
- 07——为多态基类声明为virtual析构函数
当基类确定被继承的时候,析构函数声明为virtual是必须的 当返回的派生类的指针或引用的时候,调用析构函数容易发生内存泄漏 当基类作为抽象类使用,声明pure virtual析构函数 析构函数的顺序 ...
- android-文件存储的使用
Android提供了5种方式存储数据: 1.使用SharedPreferences存储数据: 2.文件存储数据: 3.SQLite数据库存储数据: 4.使用ContentProvider存储数据: 5 ...
- 《JavaScript_DOM编程艺术第二版(中文)》整书笔记
目录 第3章:DOM 第4章:案例研究 第5章:最佳实践 第6章:案例改进 第7章:动态创建标记 第8章:充实文档的内容 第9章:CSS-DOM 第3章:DOM 文档:DOM中的"D&quo ...
- Linux记录从此开始
Linux记录从此开始~ 希望自己多写代码同时多记录~
- 在 2016 年学 JavaScript 是一种什么样的体验?
转 译者:方应杭 嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化.听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我 ...
- 51nod 1126 矩阵快速幂 水
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- POJ 1014 Dividing
Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 66032 Accepted: 17182 Descriptio ...
- github:如何获取项目源代码
github是流行的源码管理平台.这上面有很多开源的项目.作为普通的用户,如何获取这些开源项目的源码呢? 1.首先需要注册一个github账号. 2.安装windows下的git工具:下载地址: ht ...
- Advanced SystemCare 系统优化软件
这是一款国外非常流行的系统优化软件,功能很全面,而且中文版用起来也没有语言障碍. Pro版: C0184-8F31F-4B337-296F7 8DE4A-352D9-B4531-D60F7 5B91B ...