Dom4j解析和创建XML文档

dom4j是一套开源的XML解析工具,完全支持DOM,SAX和JAXP机制,与传统的Xerces-J相比,dom4j更为简单易用,因此实际项目中往往采用它作为xml解析器。

 

dom4j只提供了java版本的,往往有很多的开源项目都使用它作为解析器比如hibernate框架。

 

dom4j支持多种解析机制:

 

DOMReader :它负责根据W3C的DOM树创建dom4j树。

SAXReader:它基于SAX解析机制来解析一份XML文档,并将其转换为dom4j树。

XPP3Reader:其底层需要依赖于XML Pull Parser 3.x来解析XML文档,并将其装换为dom4j树。

XPPReader :他是基于XML pull Parser 2.x的解析器,目前不支持注解,CDATA和处理指令。

 

 

使用dom4j解析xml文档 (代码来源《疯狂xml讲义》)

使用它来解析xml文档非常简单,在将xml文档转换成dom4j树之后,程序就可使用一致的编程模型来处理xml文档。

这里要注意的是导入包的时候一定不能出错,因为在java自己的jdk中也有

Java代码   收藏代码
  1. package com.gengu;  
  2.   
  3. import java.io.File;  
  4. import java.util.List;  
  5.   
  6. import org.dom4j.io.SAXReader;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.Element;  
  9. import org.dom4j.Attribute;  
  10.   
  11. public class test1 {  
  12.   
  13.     public static void main(String[] args) throws Exception{  
  14.         //创建启用DTD验证功能的SAXReader对象  
  15.         SAXReader reader = new SAXReader();  
  16.         Document document = reader.read(new File("F:/新建文件夹/TestDom4j/src/com/gengu/Student.xml"));  
  17.         Element root = document.getRootElement();  
  18.         parse(root);  
  19.     }  
  20.   
  21.     public static void parse(Element element){  
  22.         //处理当前元素包含的所有属性  
  23.         parseAttribute(element);  
  24.         //获取当前元素包含的所有子元素  
  25.         @SuppressWarnings("rawtypes")  
  26.         List el = element.elements();  
  27.         //遍历每个子元素  
  28.         for(Object e: el){  
  29.             Element element2 = (Element)e;  
  30.             if(!element2.isTextOnly()){  
  31.                 parse(element2);  
  32.             }else {  
  33.                 parseAttribute(element2);  
  34.                 System.out.println(element2.getQName().getName()+"----->"+element2.getText());  
  35.             }  
  36.         }  
  37.           
  38.     }  
  39.     //定义一个方法处理元素的所有属性  
  40.     public static void parseAttribute(Element ele){  
  41.         //获取Element元素的所有属性  
  42.         @SuppressWarnings("rawtypes")  
  43.         List attList = ele.attributes();  
  44.         for(Object e:attList){  
  45.             Attribute attribute = (Attribute)e;  
  46.             System.out.println(ele.getQName().getName()+"元素的"  
  47.                     +attribute.getQName().getName() + "的属性知为:"  
  48.                     +attribute.getValue()  
  49.                     );  
  50.         }  
  51.     }  
  52. }  

下面一种是使用访问者模式来遍历XML文档

dom4j的Node接口是一个根接口,它定义了一个accept(Visitor visitor)方法。

Java代码   收藏代码
  1. package com.gengu;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.dom4j.*;  
  7. import org.dom4j.io.XPP3Reader;  
  8. import org.xmlpull.v1.XmlPullParserException;  
  9.   
  10. /** 
  11.  * 使用访问者模式遍历xml文档 
  12.  * dom4j的Node接口中定义了一个accept(Visitor visitor)方法,该方法是在node接口中定义的  
  13.  * */  
  14. public class test3 {  
  15.   
  16.     public static void main(String[] args) throws DocumentException, IOException, XmlPullParserException {  
  17.         //使用XPP3Reader来解析XML文档  
  18.         XPP3Reader reader = new XPP3Reader();  
  19.         Document document = reader.read(new File("F:/新建文件夹/TestDom4j/src/com/gengu/Student.xml"));  
  20.         document.accept(new YeekuVisitor());  
  21.     }  
  22.       
  23. }  
  24.   
  25. class YeekuVisitor extends VisitorSupport{  
  26.     //保存当前正在处理的节点  
  27.     private String currentElement;  
  28.     //当Visitor访问元素时回调该方法  
  29.     public void visit(Element node){  
  30.         //如果节点内容全部是文本  
  31.         if(node.isTextOnly()){  
  32.             System.out.println(node.getName() + "元素的信息" + node.getText());  
  33.         }  
  34.         currentElement = node.getName();  
  35.     }  
  36.     //当Visitor访问属性时回调该方法  
  37.     public void visit(Attribute node){  
  38.         System.out.println(currentElement + "元素的"  
  39.                 + node.getName() + "属性的值是:"  
  40.                 + node.getText());  
  41.     }  
  42.     //当Visitor访问处理指令的时候回调该方法  
  43.     public void visit(ProcessingInstruction node){  
  44.         System.out.println("处理指令"  
  45.                 + node.getTarget() + "的内容是:"  
  46.                 + node.getText());  
  47.     }  
  48. }  

 至于什么时候访问者模式,我讲在模式博客中仔细描述。

 

使用dom4j创建xml文档

使用dom4j创建xml文档,也很简单,只需要记住基本的Element,attribute即可。一个实例如下

Java代码   收藏代码
  1. package com.gengu;  
  2.   
  3. import java.io.FileWriter;  
  4. import java.io.IOException;  
  5.   
  6. import org.dom4j.*;  
  7. import org.dom4j.io.HTMLWriter;  
  8. import org.dom4j.io.OutputFormat;  
  9. import org.dom4j.io.XMLWriter;  
  10.   
  11. public class test2 {  
  12.   
  13.     public static void main(String[] args) throws IOException {  
  14.         //创建一个DocumentFactory duixiang   
  15.         DocumentFactory factory = new DocumentFactory();  
  16.         //创建一个Document对象  
  17.         Document document = factory.createDocument();  
  18.         //向Document对象中添加一个处理指令节点  
  19.         //document.addProcessingInstruction("crazyit", "website=\"http://www.crazyit.org\"");  
  20.         //向doc中添加根节点元素  
  21.         Element root = document.addElement("书籍列表");  
  22.         //采用循环的方式添加四个子元素  
  23.         for(int i = 0 ;i<4;i++){  
  24.             //创建一个计算机书籍子元素  
  25.             Element pcBook = root.addElement("计算机书籍");  
  26.             //添加一个随机数作为isbn的属性  
  27.             Element name = pcBook.addElement("名字");  
  28.             name.setText("编程思想");  
  29.               
  30.         }  
  31.           
  32.         OutputFormat  format = new OutputFormat("   ",true,"gbk");  
  33.         //FileWriter fwFileWriter = new FileWriter("F:/book.XHTML");  
  34.         FileWriter fw = new FileWriter("F:/book.xml");  
  35.         //定义一份XLWriter对象  
  36.         //HTMLWriter writer = new HTMLWriter(fw, format);  
  37.         XMLWriter writer = new XMLWriter(fw,format);  
  38.         writer.write(document);  
  39.         fw.close();  
  40.     }  
  41. }  

 以上就是使用dom4j解析和创建XML文档,当然也可以处理成HTMLWriter,的以输出XHTML格式的。

 

总之,使用dom4j解析XML数据是一件非常简单的事情,它的操作很固定。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值