【XML】Dom4j的使用

今天我们来介绍一款强大的xml解析工具:dom4j!

dom4j介绍:

dom4j是jdom的升级版,是一款开源软件,用来读写xml文件,hibernate等很多框架也用它来读写xml配置文件;使用的时候只需要引入dom4j的jar包即可。
dom4j可以读写xml文件,并且也支持XPath和XSLT。

dom4j的jar包结构:

interface java.lang.Cloneable
    interface org.dom4j.Node
           interface org.dom4j.Attribute
           interface org.dom4j.Branch
                  interface org.dom4j.Document
                  interface org.dom4j.Element
           interface org.dom4j.CharacterData
                  interface org.dom4j.CDATA
                  interface org.dom4j.Comment
                  interface org.dom4j.Text
           interface org.dom4j.DocumentType
           interface org.dom4j.Entity
           interface org.dom4j.ProcessingInstruction

Attribute
定义了 XML 的属性
Branch
指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA
定义了 XML CDATA 区域
CharacterData
一个标识接口,标识基于字符的节点。如CDATA,Comment,Text.
Comment
定义了 XML 注释的行为
Document
定义了XML 文档
DocumentType
定义 XML DOCTYPE 声明
Element
定义XML 元素
ElementHandler
定义了Element 对象的处理器
ElementPath
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
定义 XML entity
Node
为dom4j中所有的XML节点定义了多态行为
NodeFilter
定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction
定义 XML 处理指令
Text
定义 XML 文本节点
Visitor
用于实现 Visitor模式
XPath
在分析一个字符串后会提供一个 XPath 表达式

dom4j的使用

1、创建一个SAXReader对象
  SAXReader reader = new SAXReader();  

  2、 通过read方法读取一个文件 转换成Document对象
  Document document = reader.read(new File("src/EPP_02001218.xml"));  

  3获取根节点元素对象  
  Element node = document.getRootElement();

  4获取节点内的内容,比如<book>数学之美</book>,可得到“数学之 美”
 node.getText();

  5获取node节点下的第一个名为book的节点
 node.element("book");

  6获取节点内的名称,比如<book>数学之美</book>,可得到“book”
node.getName();
  7自带的三种遍历
  //枚举node下的所有子节点
   for ( Iterator i = node.elementIterator(); i.hasNext(); ) {
       Element element = (Element) i.next();
       // do something
    }
    // 枚举名称为foo的节点
    for ( Iterator i = node.elementIterator(foo); i.hasNext();) {
       Element foo = (Element) i.next();
       // do something
    }
    // 枚举属性
    for ( Iterator i = node.attributeIterator(); i.hasNext(); ) {
       Attribute attribute = (Attribute) i.next();
       // do something
    }
  8、返回一个Element类型的list,获取node节点下的所有名为book的节点(只包括node的子节点)
 List<Element> nodes = node.elements("book"); 

  9、遍历这个list
   for (Iterator it = nodes.iterator(); it.hasNext();) {     
      Element elm = (Element) it.next();    
      // do something 
 }  

 10、遍历一个xml的所有节点
public static void listNodes(Element node) {  

      System.out.println("当前节点的名称:" + node.getName()); 

       //Todo SOMETHING

      Iterator<Element> it = node.elementIterator();  
        // 遍历 
        while (it.hasNext()) {  
            // 获取某个子节点对象 
            Element e = it.next();  
            // 对子节点进行遍历 
            listNodes(e);  
        }  
    }  
   11、把这个node节点的所有内容包括标签)作为String字符串返回
   node.asXML();

此外,还可以增加节点;删除节点;对每个节点、节点中的属性、节点的内容进行增加修改删除

附:

操作xml有一个很重要的方法,就是使用xpath,我还会写一篇文章介绍xpath,从而操作xml更灵活方便,当然dom4j也提供了xpath很好的支持

更多dom4j功能的介绍,请参考:
http://www.jb51.cc/article/p-opkmxydx-po.html
http://www.blogjava.net/i369/articles/154264.html
http://www.cnblogs.com/forlina/archive/2011/06/09/2076534.html

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念