Dom4j操作xml文件

操作环境:Exclipse luna +dom4j-1.6.1+java
操作xml文件,很早就做过了,今天又重新写了一个小样,来整理一下。
首先,我们用java来操作xml文件,一般有两种方式。一种是DOM, 另一种是SAX. SAX 和DOM 在实现过程中,分别侧重于不同的方法满足不同的需求。
其中,Dom的优点在于可以实现随机访问,其原理在于dom会将文档的逻辑结构(包括文档的根、元素、元素内容、属性、属性值)等都以对象模型的形式保存到内存中,所以可以以任何顺序来访问xml元素。而Sax是提供了对xml文档的顺序访问模式,这种模式的好处之一是访问速度很快,它是基于事件的,不需要全部加载到内存,所以所需的系统资源较少,可以用来分析大型的xml文档,比较高效。
【我们这里演示的是第一种方式。】
按照惯例,我们首先强调几个可能会出现的问题。
1.记得导入dom4j的jar包。
2.在写xml文档的时候,可能会出现中文乱码问题,这一点的解决方式有多种,附一篇笔者看到的文档,很详细。
http://blog.csdn.net/centralperk/article/details/6433561

3.如果解析文档的路径使用的是相对路径,建议放到与java文件同一个包下。

  1. 供解析的xml文档:

这里写图片描述

解析的效果图:
这里写图片描述
5.测试生成的xml文档的效果图,默认放在D盘根目录下
这里写图片描述
6.下面上干货

package com.sinotimes.soft.xml;

import java.security.KeyStore.Entry.Attribute;
import java.util.List;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import javax.sql.rowset.spi.XmlWriter;

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

public class xmlTest {
//构造函数
public void xmlTest(){

}
//解析xml
public void readXml(){
    SAXReader saxReader = new SAXReader();
    try {
        Document document =  saxReader.read(new File("NewFile.xml"));
        //获取根元素
        Element root = document.getRootElement();
        List <Element> childNode = root.elements();
        if(childNode !=null){
            for(int i=0;i<childNode.size();i++){
                System.out.println("----这是第"+i+"本书的信息----");
                Element book = childNode.get(i);
                System.out.println("类别:"+book.attributeValue("category"));
                System.out.println("书籍名称:"+book.elementText("name"));
                System.out.println("价格:"+book.elementText("price"));
                System.out.println("出版社:"+book.elementText("publisher"));
            }
        }
    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
//写xml
public void createXml() {

    String nameStr,weighStr,tallStr;
    //创建文档对象
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement("students");
    for(int i=0;i<4;i++){
        if(i==0){
            nameStr = "李明";
            weighStr = "65kg";
            tallStr = "178cm";
        }else if(i==1){
            nameStr = "张磊";
            weighStr = "70kg";
            tallStr = "183cm";
        }else if(i==2){
            nameStr = "刘潇潇";
            weighStr = "53kg";
            tallStr = "168cm";
        }else{
            nameStr = "赵媛媛";
            weighStr = "55kg";
            tallStr = "172cm";
        }
        Element student = root.addElement("student");
        student.addAttribute("ID", "学生"+i);
        student.addElement("name",nameStr);
        student.addElement("weight",weighStr);
        student.addElement("tall",tallStr);
    }
    try {
        Writer fileWriter = new FileWriter("D:\\student.xml");
        OutputFormat format = OutputFormat.createPrettyPrint(); //控制显示xml元素换行,为了美观作用
        format.setEncoding("gb2312");
        XMLWriter xmlWriter = new XMLWriter(fileWriter,format);
        xmlWriter.write(document);
        xmlWriter.close();
        System.out.println("create end!");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public static void main(String args[]) throws Exception{
    xmlTest mXMLTest = new xmlTest();
    //解析xml
//  mXMLTest.readXml();  
    //生成xml
    mXMLTest.createXml();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>