现在的位置: 首页 > 综合 > 正文

dom4j解析xml

2014年09月05日 ⁄ 综合 ⁄ 共 2771字 ⁄ 字号 评论关闭
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>

抱歉!评论已关闭.