博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dom4J 学习
阅读量:5158 次
发布时间:2019-06-13

本文共 5822 字,大约阅读时间需要 19 分钟。

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()方法增加文本节点。

1         for (Admin item : allAdmins) 2         { 3             Element admin = root.addElement("admin"); 4  5             admin.addAttribute("aid", item.getAid()); 6             admin.addElement("rid").addText(String.valueOf(item.getRid())); 7             admin.addElement("type").addText(String.valueOf(item.getType())); 8             admin.addElement("lastdate").addText(String.valueOf(item.getLastdate())); 9             admin.addElement("flag").addText(String.valueOf(item.getFlag()));10         }

4 将内存中的document保存到本地文件中。使用OutputFormat设置XML格式,使用XMLWriter将内存的document写到磁盘上。

1     public static void saveToFile(String path, Document document) throws Exception2     { 3         OutputFormat format = OutputFormat.createPrettyPrint();4         format.setEncoding("UTF-8");5         OutputStream os = new FileOutputStream(path);6         XMLWriter xmlWriter = new XMLWriter(os, format);7         xmlWriter.write(document);8     }

5 将本地文件读取到内存中。使用SAXReader。

1     public static Document loadFromFile(String path) throws Exception2     {3         SAXReader reader = new SAXReader();4         Document document = reader.read(new File(path));5         return document;6     }

6 对document进行更新。使用getRoot()方法可以获取根节点。使用elements()方法可以获取所有指定名称的元素节点,以List<Element>的方式返回。使用remove方法可以删除一个节点。

public static void changeStructure(Document document)    {        Element root = document.getRootElement();        List
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
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
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
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
findAllAdmins() throws Exception { List
allAdmins = new ArrayList
(); 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; }}

 

转载于:https://www.cnblogs.com/kuillldan/p/6231137.html

你可能感兴趣的文章
BeanShell简介
查看>>
python字符串操作
查看>>
MySQL学习之备份
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
windows linux—unix 跨平台通信集成控制系统
查看>>
【编程练习】复习一下树的遍历
查看>>
邮件和短信验证码
查看>>
(转)Android studio 使用心得(五)—代码混淆和破解apk
查看>>
构建之法阅读笔记03
查看>>
ES5_03_Object扩展
查看>>
Apache-ab 接口性能测试
查看>>
EF 4.1 Code First Walkthrough
查看>>
常用MySQL语法
查看>>
007API网关服务Zuul
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
iOS __strong __weak @Strongify @Weakify
查看>>
thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
查看>>
创建数据库,表
查看>>
Luogu 1970 NOIP2013 花匠 (贪心)
查看>>