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

 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 Exception
2     {
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 Exception
2     {
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<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;
    }
}
时间: 2024-10-14 09:11:59

dom4J 学习的相关文章

dom4j学习总结(一)

dom4j学习总结(一) (一)创建Document的基本操作 /**  * xml基本操作  */ public void BaseOperation(){  //创建一个document  Document document=DocumentHelper.createDocument();  //创建根结点  Element root=document.addElement("root");  //为根结点添加一个book节点  Element book1=root.addElem

dom4j学习

在使用xml读写的过程中,用到了dom4j,也算是一个比较主流的xml包了,在使用的过程中,将学习经历记录一下,以后查阅也比较方便. 首先是在pom中添加依赖,在Maven的中心库搜索后选择了该包: <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6</version> </dependency> 添

dom4j 学习总结

Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. 了解xml-dom模型,对于学习dom4j有很大的帮助.dom4j用于读写xml文件,是xml文档的一种解析方式.(xml文档的一

Dom4j学习笔记

一.Loading XML Data 以下代码从File中或一个URL中读取一个XML文件,并产生一个Document对象.一个Document对象表示了内存中的一棵XML树,可以在这个XML树中进行遍历.查询.修改等操作. import java.io.*;import java.net.*;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader; public cla

学习笔记(十)Listener

7. HttpSessionActivationListener 1). 监听实现了该接口和 Serializable 接口的 Java 类的对象随 session 钝化和活化事件 > 活化: 从磁盘中读取 session 对象  > 钝化: 向磁盘中写入 session 对象  > session 对象存储在tomcat 服务器的 work\Catalina\localhost\contextPath 目录下. SESSION.SER 2). 该监听器不需要在 web.xml 文件中进

计算机科学精彩帖子收集

inux源码 LXR 源自"the Linux Cross Referencer",中间的"X"形象地代表了"Cross".与 Source Navigator 类似,它也是分析阅读源代码的好工具.不同的是,它将源代码借助浏览器展示出来,文件间的跳转过程成了我熟悉的点击超链接动作. http://lxr.linux.no/   LXR安装过程简介 linux手册 http://linux.die.net/man/ Linux每周新闻 http:/

java Element类的用法

1 此类是用来构建xml中节点的.方法举例: 2 //构建 XML Document 报文 3 private String createLoginXML( String serialNo, String reqTime, String userID, String userPWD){ 4 String retStr = null; 5 Document reqData = null; 6 try{ 7 DocumentBuilderFactory docFac = DocumentBuilde

java学习之dom4j 对 xml的读取

在BS中已经学习了关于XML的知识,但是一直对于XML的理解是"不重要","有没有都可以".但是在没有xml的日子里,程序员想进行进程间数据传递,必须自己设计传输接口,里面牵涉到很多烦人的数据格式等问题,使得程序员不能专注于具体业务的解决.如今xml和各种语言对xml的支持包,把程序员解脱出来了. 了解了XML再来说说关于dom4j的知识吧.dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML AP

J2EE学习之路---SAX与DOM4J

什么是SAX SAX,全称Simple API for XML,既是一种接口,也是一种软件包.它是一种XML解析的替代方法.SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析.由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势.我们将在dom4j的学习中使用到SAX,于是先对SAX进行了解. 如何使用SAX 与之前学习的DOM中解析器创建方法类似,利用工厂模式和单例模式的结合,创造出一个解析器的实例.下面是打开一个XML文件的示例代码: S