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>