使用dom4j解析XML文档

dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了

做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不准确,也会导致多个同名的方法理解和用法不同

XML:

<?xml version="1.0" encoding="utf-8"?>
<students>
    <student age="25">
        <name>张三</name>
        <college>信息学院</college>
        <telphone>13610262187</telphone>
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
    </student>
    <student >
        <name>李四</name>
        <college leader="leader">PC学院</college>
        <telphone>13610262187</telphone>
        <notes>男,1983年生,硕士,现就读于中国农业大学</notes>
    </student>

</students>

使用dom4j进行增、删、查、改、保存更新(不想对原文件进行操作,所以输出到另一个文件中,看更新后的内容)

代码如下:

package d0620;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.w3c.dom.NodeList;

/*
 * 使用Dom4j解析XML文档
 */
public class StudentDom4j {
    private Document document;
    public void getDom(File file){
//        创建SAXReader creates a DOM4J tree from SAX parsing events. 创建SAX解析器
        SAXReader sax=new SAXReader();
        try {
//            生成DOM树
            document=sax.read(file);
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }

//    读取student.xml文件中的信息
    public void showXML(File file){
//        获取XML的根节点
    Element root=document.getRootElement();
    System.out.println("Root:"+root.getName());

    //获取所有子元素
    List<Element> childlist=root.elements();
    System.out.println("total child count:"+childlist.size());

    //获取特定名称的子元素
    List<Element> student=root.elements("student");
    System.out.println(student.size());
    for(Iterator it=student.iterator();it.hasNext();){
        Element studentele=(Element)it.next();
        String age=studentele.attributeValue("age");
        if(age!=null){
            System.out.println("<"+studentele.getName()+" "+"age="+studentele.attributeValue("age")+">");
        }else{
            System.out.println("<"+studentele.getName()+">");
        }

        //取name的文本
        List<Element> names=studentele.elements("name");
        for(Iterator nameit=names.iterator();nameit.hasNext();){
            Element name=(Element)nameit.next();
            System.out.println("\t"+"name="+name.getText());
        }
        //取college的文本值
        List<Element> colleges=studentele.elements("college");
        for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){
            Element college=(Element)collegeit.next();
            //判断有没有属性,如果有就取属性值isTextOnly()如果这个元素只有文本内容则返回true

                String leader=college.attributeValue("leader");
                String text=college.getText();
                if(leader!=null){
                    System.out.println("\t"+college.getName()+" "+"leader="+leader);
                }else{
                    System.out.println("\t"+"college:"+college.getText());
                }

        }
        //获取telphone文本值
        List<Element> tel=studentele.elements("telphone");
        for(Iterator telit=tel.iterator();telit.hasNext();){
            Element telele=(Element) telit.next();
            System.out.println("\t"+"telphone:"+telele.getText());
        }

        //获取notes文本值
        List<Element> notes=studentele.elements("notes");
        for(Iterator noteit=notes.iterator();noteit.hasNext();){
            Element noteele=(Element) noteit.next();
            System.out.println("\tnoteele:"+noteele.getText());
        }
    }

    }
//    保存
    public void saveXML(File tofile){
//        以XML格式输出createPrettyPrint()创建默认的打印格式
        OutputFormat of=OutputFormat.createPrettyPrint();
//        设置编码
        of.setEncoding("utf-8");
        try {
//            以XML格式输出到dom4j.xml中
            XMLWriter writer=new XMLWriter(new FileOutputStream(tofile),of);
//            把源树DOM树输出写进dom4j.xml中
            writer.write(document);
            writer.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
//    修改XML元素
    public void updateEle(){
        //先要获取到age
        //得到根元素
        Element root=document.getRootElement();
        //得到 student元素
        List<Element> students=root.elements("student");
//        修改<student age="25">的age属性为22
        for(Iterator stuit=students.iterator();stuit.hasNext();){
            Element stu=(Element) stuit.next();
            String age=stu.attributeValue("age");
            if(age!=null){
                //就是要替换的,修改属性值
                stu.attribute("age").setText("22");
            }
//            修改<name>李四</name> 的name文本为sb
            List<Element> names=stu.elements("name");
            for(Iterator name=names.iterator();name.hasNext();){
                Element nameele=(Element) name.next();
                String nametext=nameele.getText();
                if(nametext.equals("李四")){
                    //替换
                    nameele.setText("sb");
                }
            }
//            修改<college leader="leader">的leader值为否
            List<Element> colleges=stu.elements("college");
            for(Iterator collegeit=colleges.iterator();collegeit.hasNext();){
                Element college=(Element) collegeit.next();
                String leader=college.attributeValue("leader");
                if(leader!=null){
                    //替换
                    college.attribute("leader").setText("否");
                }
            }
        }
    }

//    新增元素
    public void addEle(){
    /*    <student >
        <name>杜和雨</name>
        <college leader="leader">PC学院</college>
    </student>*/
//        创建根节点
        Element root=document.getRootElement();
//        创建student标签
        Element student=root.addElement("student");
        //创建student子标签name
        Element name=student.addElement("name");
        //给name添加文本
        name.setText("杜和雨");
        //创建student的子标签college
        Element college=student.addElement("college");
        //给college添加文本值
        college.addAttribute("leader", "big boss");

    }
//    删除元素
    public void deleteEle(){
/*        <student >
        <name>李四</name>
        <college leader="leader">PC学院</college>
        <telphone>13610262187</telphone>
        <notes>男,1983年生,硕士,现就读于中国农业大学</notes>
    </student>*/

        //得到 根节点
        Element root=document.getRootElement();
        //找到 student节点
        List<Element> students=root.elements();
        //删除第1个student节点的所有子节点
        //students.remove(0);

        //删除college的属性leader
        for(Iterator<Element> stuit=students.iterator();stuit.hasNext();){
            Element stu=stuit.next();
            List<Element> colleges=stu.elements();
            for(Iterator<Element> collit=colleges.iterator();collit.hasNext();){
                Element coll=collit.next();
                String leader=coll.attributeValue("leader");
                if(leader!=null){
                    coll.remove(coll.attribute("leader"));
                }
            }
        }

    }

//    主函数,测试
    public static void main(String[] args){
        StudentDom4j sd=new StudentDom4j();
        File file=new File("student.xml");
        File tofile=new File("dom4j_student.xml");
        sd.getDom(file);
        sd.showXML(file);
        sd.updateEle();
        sd.addEle();
        sd.deleteEle();
        sd.saveXML(tofile);
    }

}

常用的方法真的要熟悉才行!!!!

时间: 2024-10-23 17:43:32

使用dom4j解析XML文档的相关文章

javaweb dom4j解析xml文档

1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它.在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能.功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的.如今可以看到越

【学习笔记】关于DOM4J:使用DOM4J解析XML文档

一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org.dom4j这个包里定义: 二.DOM4J的接口 Attribute:定义了XML的属性: Branch:是能够包含子节点的节点,如XML元素(Element)和文档(Documents)定义了一个公共的行为: CDATA:定义了XML的CDATA区域: CharacterData:是一个标识接口,标

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

dom4j 解析 XML文档截录

dom4j 是一种解析 XML 文档的开放源代码 XML 框架.本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档. dom4j API 包含一个解析 XML 文档的工具.本文中将使用这个解析器创建一个示例 XML 文档.清单 1 显示了这个示例 XML 文档,catalog.xml. 清单 1. 示例 XML 文档(catalog.xml) <?xml version="1.0" encoding="UTF-8"?> <cat

Strus2第一次课:dom4j解析xml文档

xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术:读取文档时激活一系列的事件事件推给事件处理器,然后由事件处理器提供对文档的访问内存消耗小无需为所有节点创建对象 xml规范文档: dtd特殊符号:*:零次或者任意多次|:里面的元素多选一():分组,:里面的元素必须出现+:最少出现一次?:最多出现一次dtd定义属性:元素:<!ELEMENT con

DOM4J与JDOM解析xml文档

1.   JDOM方式解析XML JDOM并不是java官方解析xml文档的方法,所以在进行文档解析前,需要下载JDOM的jar包:http://www.jdom.org/downloads/:并将其路径添加到当前项目中,或者把jar包拷贝到当前项目中. 同样地使用前面的books.xml文档进行解析: books.xml: <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用

艺多不压身 -- 四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX: JDOM: DOM4J: 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.