*使用dom4j开发步骤如下:
第一步,需要下载dom4j-1.6.1.zip文件,打开路径下dom4j-1.6.1\docs\index.html帮助文档,快速的使用dom4j解析XML技术。
掌握dom4j以下核心对象及属性,基本上就可以游刃有余的解析XML各种复杂的操作。
一.Document对象
DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document = DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
二、节点对象
1.获取文档的根节点.
Element root = document.getRootElement();
2.取得某个节点的子节点.
Element element=node.element(“书名");
3.取得节点的文字
String text=node.getText();
4.取得某节点下所有名为“member”的子节点,并进行遍历.
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
5.对某节点下的所有子节点进行遍历.
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
三、节点对象属性
1.取得某节点下的某属性
Element root=document.getRootElement();
//属性名name
Attribute attribute=root.attribute("size");
2.取得属性的文字
String text=attribute.getText();
3.删除某属性
Attribute attribute=root.attribute("size");
root.remove(attribute);
3.遍历某节点的所有属性
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
4.设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
四、将文档写入XML文件
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
五、Dom4j在指定位置插入节点
1.得到插入位置的节点列表(list)
2.调用list.add(index,elemnent),由index决定element的插入位置。
Element元素可以通过DocumentHelper对象得到。示例代码:
Element aaa = DocumentHelper.createElement("aaa");
aaa.setText("aaa");
List list = root.element("书").elements();
list.add(1, aaa);
//更新document
六、字符串与XML的转换
1.将字符串转化为XML
String text = "<members> <member>sitinspring</member></members>";
Document document = DocumentHelper.parseText(text);
2.将文档或节点的XML转化为字符串.
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
Element root=document.getRootElement();
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();
案例如下:
1.创建person.xml文件
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person>
<name>谢斌</name>
<age>24</age>
<address>长沙</address>
</person>
<person>
<name>黄斌</name>
<age>24</age>
<address>深圳</address>
<sex>真正的男人</sex>
</person>
<person>
<name id="135">徐斌</name>
<age>21</age>
<address>常德</address>
</person>
</persons>
2.PersonJunit.java
package cn.albin.dom4j;
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.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.BeforeClass;
import org.junit.Test;
public class PersonJunit {
private static Document document;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
SAXReader reader = new SAXReader();
document = reader.read(new File("src/person.xml"));
}
//读取 徐斌节点 内容
@Test
public void read() throws Exception{
//获取根节点信息
Element el = document.getRootElement();
//获取pserson(徐斌)节点
Element elpson = (Element)el.elements("person").get(2);
//获取pserson(徐斌)节点下的name节点
String name = elpson.element("name").getText();
//获取pserson(徐斌)节点下的name节点的属性值
String phone = elpson.element("name").attributeValue("id");
System.out.println(name+phone);
}
//读取所有的person信息
@Test
public void readerXml(){
Element root = document.getRootElement();
List<Element> persons = root.elements("person");
for(Element person : persons){
String name = person.element("name").getText();
String age = person.element("age").getText();
String address = person.element("address").getText();
System.out.println(name+age+address);
}
}
//给黄斌添加一个性别
@Test
public void addSex() throws Exception{
Element sexNode = DocumentHelper.createElement("sex");
sexNode.setText("中性");
//得到person(黄斌)节点
Element personNode = (Element)document.getRootElement().elements("person").get(1);
//添加节点
personNode.elements().add(3,sexNode);
updateDoc();
}
//更新节点信息
@Test
public void updateXml() throws Exception{
Element person_Tag = (Element)document.getRootElement().elements("person").get(1);
person_Tag.element("sex").setText("真正的男人");
updateDoc();
}
//删除黄斌
@Test
public void deleteXml() throws Exception{
Element per_Tag = (Element)document.getRootElement().elements("person").get(1);
per_Tag.getParent().remove(per_Tag);
updateDoc();
}
//更新Document
public void updateDoc() throws Exception {
//处理中文乱码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter xmlWrite = new XMLWriter(new FileOutputStream("src/person.xml"),format);
xmlWrite.write(document);
xmlWrite.close();
}
}