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 ...
随机推荐
- discuz ucenter无法连接数据库
discuz ucenter无法连接数据库 - discuz搬家后 ucenter无法连接数据库 论坛换了个空间,把密码和数据库名称都改了,点击ucenter时候出现了: UCenter info: ...
- The long way
转眼毕业一年多了,经历的好复杂,从PHP转到了C++,回到了老本行. 虽然PHPDE各种框架已经很熟了,但是仍然感觉这不是我想要的. 回到C++,才发现这才是自己的方向,心也跟着静了下来. 但是莫名的 ...
- Node调用C++(dll)
最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟.总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的. 折腾1:Node 调用 C++ 刚开始,虽然我老师把dll文件给 ...
- js中的break ,continue, return (转)
面向对象编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢?我们在使用这三关键字的时候需要注意和需要理解的规则是什么呢? ...
- 修改PHP上传文件大小限制的方法
感谢分享,原文地址:http://www.cnblogs.com/newsouls/archive/2012/12/27/2835628.html 修改PHP上传文件大小限制的方法1. 一般的文件上传 ...
- SPARK SQL 中registerTempTable与saveAsTable的区别
使用registerTempTable注册表是一个临时表,生命周期只在所定义的sqlContext或hiveContext实例之中.换而言之,在一个sqlontext(或hiveContext)中re ...
- Enhanced Mitigation Experience Toolkit 软件安全性强化工具
Enhanced Mitigation Experience Toolkit软件是微软为应对互联网中层出不穷的漏洞而推出的一款安全工具,可以在Window Update未获取到补丁前,对系统进行保护. ...
- php部分,一个用递归无限分类的方法
<?php $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国'); $data[]=array('id'=>2,'paren ...
- swift开源项目精选
Swift 开源项目精选-v1.0 2016-03-07 22:11 542人阅读 评论(0) 收藏 举报 分类: iOS(55) Swift(4) 目录(?)[+] 转自 http: ...
- 汇编语言基础 debug的使用
-r 查看,改变CPU寄存器的内容 -r 加上寄存器名 在:后输入要写入的数据后 完成更改 debug 随着CS IP的改变 对应的汇编指令也不同 -r ip -r cs修改 ip cs 的值 d 段 ...