package com.wepull.dom4j;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestDom4j {
/**
* @param path 所需要解析的xml路径
*/
public void parseXML (String path){
//实例化一个xml文档解析器 DOM4J自己编写的文档解析器
SAXReader reader =new SAXReader();
try {
//开始使用对象读取所要解析的xml文档
//通过文档解析器 读取需要解析xml 将xml加载到内存中国
Document document= reader.read(path);
//获得根节点元素对象
Element root=document.getRootElement();
System.out.println("根节点名称:"+root.getName());
//将解析整份文档方法封装到一个方法中
// 将根节点对象 传入到解析方法中
praseROOT(root);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/***全面解析xml文档****/
private void praseROOT(Element root) {
//获得根节点中所有的子节点(不能拿到孙节点)
Iterator<Element> elements=root.elementIterator();
//循环遍历元素
while(elements.hasNext()){
//拿出下一个元素 一个个的根节点的子元素
Element e=elements.next();
System.out.println("子节点元素名称"+e.getName());
// System.out.println("子节点元素的text内容(去除空格的)"+e.getTextTrim());
//得到元素上面的各个属性的迭代
Iterator<Attribute> attrs=e.attributeIterator();
// System.out.println(attrs);
//迭代遍历属性
while(attrs.hasNext()){
Attribute att=attrs.next();
// System.out.println(att+"101111");
System.out.println("属性:"+att.getName()+"-->"+att.getValue());
}
//循环递归调用 遍历整个文档树
praseROOT(e);
}
}
/**
* 创建一个XML文档
*/
public void createXML(){
//创建一个document对象 全部的节点增加以这个对象开始
Document document=DocumentHelper.createDocument();
//增加一个root根节点
Element root =document.addElement("root");
//root节点下增加一个节点class
Element cla=root.addElement("class").addAttribute("name", "zhangsan");
//class节点下增加p元素
cla.addElement("p").addAttribute("name", "李四").addAttribute("password", "123");
//根节点下增加一个city节点 并在该节点上增加文本信息
root.addElement("city").addAttribute("person", "3000000").addText("武汉");
//创建一个漂亮的格式
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding("gbk");
try {
//通过流将信息输出到指定文件
FileWriter fw = new FileWriter("user2.xml");
//通过XMLWriter对象真正输出
XMLWriter writer = new XMLWriter(fw,of);
writer.write(document);
// //真正开始写入
// document.write(fw);
fw.flush();
fw.close();
System.out.println("=========");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// new TestDom4j().parseXML("user.xml");
new TestDom4j().parseXML("file.xml");
// new TestDom4j().createXML();
}
}
</pre><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<root>
<class name="albumInfo" class="com.huawei.bean.CAlbumInfo">
<item name="albumName" regex=" {2,}" replace=" " />
<list name="songInfos" ref="songInfo" />
<list name="artistInfos" ref="artistInfo" />
</class>
<class name="songInfo" class="com.huawei.bean.CSongInfo">
<item name="musicName" regex=" {2,}" replace=" " />
</class>
<class name="artistInfo" class="com.huawei.bean.CArtistInfo">
</class>
</root>