您的位置:首页 > 编程语言 > Java开发

Java DOM4J解析XML文件

2016-09-11 15:37 288 查看
    Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

一.Dom4j读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,

  1)Document:定义XML文档

         read(name) 文档对象

  

  2)Element:定义XML元素

       getRootElement() 获得根节点students

       addElement() 添加元素  name

       addAttribute() 添加属性 id

       addText() 添加文本值 21

       elements() 获得多个节点List

  

  3)Text:定义XML文本节点

      getText() 获得值
      setText() 设置值

       elementText()  获得元素值

     

  4)Attribute:定义了XML 的属性

       attributeValue 属性值

  
  二.写入XML文件:  XMLWriter类 

 三 .具体操作(CRUD)的步骤

    1)xml文件(同上stu.xml),实体类省略,

    2)业务类

package com.hlx.dom4j.gbk;

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

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class StudentBiz {
/**
* 1.获得文档对象
*
* @param name
* xml文件
* @return
*/
public Document getDocument(String name) {
// 1.读取对象
SAXReader reader = new SAXReader();

// 2.获得文档对象
try {
Document document = reader.read(new File(name));

return document;
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;

}

/**
* 2.解析文档 XML
*
* @param name
*/
public void parseXMl(String name) {
// 1.获得文档对象
Document document = getDocument(name);

// 2.获得根节点
Element root = document.getRootElement();

List<Element> list = root.elements();
// dom =7 dom4j=3
System.out.println(list.size());

System.out.println("学号\t\t姓名\t年龄");
// 循环数据
for (Element element : list) {

// 存放字符串数据
StringBuffer buffer = new StringBuffer();

// 追加数据
buffer.append(element.attributeValue("id") + "\t");
buffer.append(element.elementText("name") + "\t");
buffer.append(element.elementText("age"));

System.out.println(buffer.toString());
}

}

/**
*
* @param name
* @param stu
*/
public void add(String name, Student stu) {
// 1.获得文档对象
Document document = getDocument(name);

// 2.获得根节点
Element root = document.getRootElement();

// 3.添加孩子 root==> student,id
Element studentElement = root.addElement("student").addAttribute("id",
stu.getId());

//student==> name
studentElement.addElement("name").addText(stu.getName());

//student==> age
studentElement.addElement("age").addText(stu.getAge() + "");

// 4.写入xml文件
saveToXml(name, document);

System.out.println("添加成功!");

}

/**
* 写入XML文件中 格式化XML文档,并解决中文问题
*
* @param name
* @param document
*/
public void saveToXml(String name, Document document) {
try {

/** 格式化输出,类型IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();

/** 指定XML编码 */
// format.setEncoding("gbk");

// 写入对象
XMLWriter writer = new XMLWriter(new FileOutputStream(
new File(name)), format);

// 写入
writer.write(document);

// 关闭写入对象
writer.close();

} catch (UnsupportedEncodingException | FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 删除XML文件中的某一个数据
*
* @param string
* @param student
*/
public void del(String name, Student student) {
// 1.获得文档对象
Document document = getDocument(name);

// 2.获得根节点
Element root = document.getRootElement();

// 3.根节点的孩子student
List<Element> list = root.elements();
for (Element element : list) {
// 判断
if (element.attributeValue("id").equals(student.getId())) {

// 删除
root.remove(element);

//
break;
}
}

// 4.写入xml文件
saveToXml(name, document);

System.out.println("删除成功!");

}

/**
* 修改数据
*
* @param string
* @param stu1
*/
public void update(String name, Student student) {
// 1.获得文档对象
Document document = getDocument(name);

// 2.获得根节点
Element root = document.getRootElement();

// 3.根节点的孩子student
List<Element> list = root.elements();
for (Element element : list) {
// 判断
if (element.attributeValue("id").equals(student.getId())) {

// 修改
element.element("name").setText(student.getName());
element.element("age").setText(student.getAge()+"");

//
break;
}
}

// 4.写入xml文件
saveToXml(name, document);

System.out.println("修改成功!");
}
}
   3)测试类省略

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: