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

java--DOM4j-SAXReader对xml文档的解析2

2016-09-17 14:53 459 查看

DOM4j-SAXReader解析:

Dom SUN

:dom在加载时,将所有元素全部加载内存

DOM4j-第三方。

Dom4j是一个开源、灵活的XML API。

目前很多开源框架如struts,hibernate都使用dom4j做为解析其xml的工具。

支持文档的读写功能和Xpath快速查询操作。

准备DOM4j:

包: dom4j.x.jar

包结构: org.dom4j

类:

org.dom4j.io.SAXReader–xml文档解析器

org.dom4j.Document、Element–文档对像

1.Element的一些方法

2.Element.element(“name”)-此元素下的第一个name元素。

3.Element.elementIterator(“name”)–此元素下的所有name元素。返回Iterator

5.Element.getText()–返回元素包含的文本。

6.Element.getAttribute(“name”)–返回名称为name的属性。

7.Element.addElement(“name”);-添加一个name元素,同时返回name元素本身。

org.dom4j.io.XMLWriter – 将Document写出的对像。

准备XML数据:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user id="A001">
<name>jack</name>
<age>23</age>
</user>
<user id="A002">
<name>张三</name>
<age>20</age>
</user>
<user id="A003">
<name>李四</name>
<age>60</age>
</user>

</users>


import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class dom4jDemo {

@Test//读取users.xml中第一个<user>元素的信息
public void ReadDemo() throws Exception{
//获取dom对象
SAXReader reader=new SAXReader();
Document dom=reader.read("./xml/users.xml");
//获取根结点
Element eUsers=dom.getRootElement();
Iterator it=eUsers.elementIterator();
while(it.hasNext()){
Element e=(Element) it.next();
String id=e.attributeValue("id");
String id2=e.attribute("id").getValue();
String name=e.element("name").getText();
String name2=e.elementText("name");
System.out.println("id="+id+"id2="+id2+"name="+name+"name2="+name2);
}
}
@Test//读取users.xml中第一个<user>元素的信息
public void WriterDemo() throws Exception{
//获取dom对象
SAXReader root=new SAXReader();
Document dom=root.read("./xml/users.xml");
//获取根结点
Element eUsers=dom.getRootElement();
Element userNew=eUsers.addElement("user");
userNew.addAttribute("id", "B001");
userNew.addElement("name").setText("new");
//      userNew.element("name").addText("new");
//userNew.addElement("name").addText("new");
//      userNew.addElement("name", "new");
//
XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut.xml"));//将待存储的dom树存到./xml/usersOut.xml中,也可以是原文档,但是会把原来的数据冲掉
w.write(dom);
w.close();//字符流中有缓存,必须手动刷
}
@Test//把最后一个节点删除
public void DeleteDemo() throws Exception{
SAXReader reader=new SAXReader();

Document dom=reader.read(new File("./xml/users.xml"));

Element root=dom.getRootElement();

//      获取最后一个root结点
List<Element> list=root.elements();//
//      root.remove(list.get(list.size()-1));
Element e=list.get(list.size()-1);
e.getParent().remove(e);

XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut2.xml"));
w.write(dom);
w.close();
}
@Test//把最后一个节点修改
public void ChangeDemo() throws Exception{
SAXReader reader=new SAXReader();
Document dom=reader.read(new File("./xml/users.xml"));
Element root=dom.getRootElement();
//      获取最后一个root结点
List<Element> list=root.elements();//
//      root.remove(list.get(list.size()-1));
Element e=list.get(list.size()-1);
//      e.attribute("id").setText("c001");
e.addAttribute("id","c001");//如果该属性存在就修改,不在就添加
e.element("age").setText("20");
XMLWriter w=new XMLWriter(new FileOutputStream("./xml/usersOut3.xml"));
w.write(dom);
w.close();
}
@Test//本地原来不存在xml文档,现通过程序生成一个新的xml文档
public void CreateDemo() throws Exception{
//利用DocumentHelper类在内存中生成一个空的dom对象
Document dom=DocumentHelper.createDocument();
//为dom构建树
Element root=dom.addElement("cities");
Element ecity=root.addElement("city");
ecity.addAttribute("id", "0727");
ecity.addElement("name", "yiyang");
ecity.addElement("history", "100");
//把dom对象树存储到本地文件
XMLWriter w=new XMLWriter(new FileOutputStream("./xml/city.xml"));
w.write(dom);
w.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml