当前位置: 移动技术网 > IT编程>开发语言>Java > Dom4j解析XML_动力节点Java学院整理

Dom4j解析XML_动力节点Java学院整理

2019年07月19日  | 移动技术网IT编程  | 我要评论

dom4j是一个java的xml api,类似于jdom,用来读写xml文件的。dom4j是一个非常非常优秀的java xml api,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在sourceforge上找到它.

对主流的java xml api进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的java软件都在使用dom4j来读写xml,例如hibernate,包括sun公司自己的jaxm也用了dom4j。

使用dom4j开发,需下载dom4j相应的jar文件

1.官网下载:

2.dom4j是sourceforge.net上的一个开源项目,因此可以到下载其最新版.

打开dom4j-1.6.1的解压文件,在这里可以看到有docs帮助的文件夹,也有需要使用dom4j解析xml文件的dom4j-1.6.1.jar文件.我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了.

下面我以myeclipse创建java项目的构建方法为例说明.

首先创建一个demo项目,在demo项目中创建一个lib文件,把dom4j-1.6.1.jar文件拷贝到lib中,然后右键dom4j-1.6.1jar文件

点击add to build path即可构建到项目中去了.

备注:如果进行的是web项目开发,我们只需要把它拷贝到web-inf/lib中去即可,会自动构建到web项目中.

在项目开发的过程中可以参考docs文件夹的(帮助文档),找到打开,点击quick start可以通过帮助文档进行学习 dom4j进行xml的解析.

下面我对我认为api中重要的方法进行翻译说明如下:

一、dom4j中,获得document对象的方式有三种:

//1.读取xml文件,获得document对象       
         saxreader reader = new saxreader();         
    document  document = reader.read(new file("csdn.xml")); 
//2.解析xml形式的文本,得到document对象. 
         string text = "<csdn></csdn>";        
         document document = documenthelper.parsetext(text); 
//3.主动创建document对象. 
         document document = documenthelper.createdocument();       //创建根节点 
         element root = document.addelement("csdn"); 

二、节点对象操作的方法

//1.获取文档的根节点. 
   element root = document.getrootelement(); 
//2.取得某个节点的子节点. 
   element element=node.element(“四大名著"); 
//3.取得节点的文字 
    string text=node.gettext(); 
//4.取得某节点下所有名为“csdn”的子节点,并进行遍历.  
    list nodes = rootelm.elements("csdn");  
     for (iterator it = nodes.iterator(); it.hasnext();) {   
   element elm = (element) it.next();   
  // do something 
 } 
//5.对某节点下的所有子节点进行遍历.    
   for(iterator it=root.elementiterator();it.hasnext();){     
    element element = (element) it.next();     
    // do something  
 } 
// 6.在某节点下添加子节点 
 element elm = newelm.addelement("朝代"); 
//7.设置节点文字. 
 elm.settext("明朝"); 
//8.删除某节点. //childelement是待删除的节点,parentelement是其父节点 
parentelement.remove(childelment);  
//9.添加一个cdata节点. 
element contentelm = infoelm.addelement("content"); contentelm.addcdata(“cdata区域”); 

三、节点对象的属性方法操作

//1.取得某节点下的某属性   element root=document.getrootelement();     //属性名name 
     attribute attribute=root.attribute("id"); 
//2.取得属性的文字 
  string text=attribute.gettext(); 
//3.删除某属性 attribute attribute=root.attribute("size"); root.remove(attribute); 
//4.遍历某节点的所有属性   
   element root=document.getrootelement();     
    for(iterator it=root.attributeiterator();it.hasnext();){      
      attribute attribute = (attribute) it.next();      
      string text=attribute.gettext();      
      system.out.println(text);   
 } 
// 5.设置某节点的属性和文字.  

 newmemberelm.addattribute("name", "sitinspring"); 
//6.设置属性的文字  

 attribute attribute=root.attribute("name");  attribute.settext("csdn"); 

四、将文档写入xml文件

//1.文档中全为英文,不设置编码,直接写入的形式.   
    xmlwriter writer = new xmlwriter(new filewriter("ot.xml"));  
    writer.write(document);   
    writer.close(); 
// 2.文档中含有中文,设置编码格式写入的形式.  
    outputformat format = outputformat.createprettyprint(); // 创建文件输出的时候,自动缩进的格式          
    format.setencoding("utf-8");//设置编码 
    xmlwriter writer = new xmlwriter(newfilewriter("output.xml"),format); 
    writer.write(document); 
    writer.close(); 

五、字符串与xml的转换

// 1.将字符串转化为xml 
   string text = "<csdn> <java>java班</java></csdn>"; 
   document document = documenthelper.parsetext(text); 
// 2.将文档或节点的xml转化为字符串. 
    saxreader reader = new saxreader(); 
    document  document = reader.read(new file("csdn.xml"));       
    element root=document.getrootelement();   
    string docxmltext=document.asxml();  
    string rootxmltext=root.asxml(); 
    element memberelm=root.element("csdn"); 
    string memberxmltext=memberelm.asxml(); 

 六、案例(解析sida.xml文件并对其进行curd的操作)

1.sida.xml描述四大名著的操作,文件内容如下

<?xml version="1.0" encoding="utf-8"?> 
<四大名著> 
  <西游记 id="x001"> 
    <作者>吴承恩1</作者> 
    <作者>吴承恩2</作者> 
    <朝代>明朝</朝代> 
  </西游记> 
  <红楼梦 id="x002"> 
    <作者>曹雪芹</作者> 
  </红楼梦> 
</四大名著> 

2.解析类测试操作

package dom4j; 
 
import java.io.file; 
import java.io.fileoutputstream; 
import java.io.filewriter; 
import java.io.outputstreamwriter; 
import java.nio.charset.charset; 
import java.nio.charset.charsetencoder; 
import java.util.iterator; 
import java.util.list; 
 
import org.dom4j.attribute; 
import org.dom4j.document; 
import org.dom4j.element; 
import org.dom4j.io.outputformat; 
import org.dom4j.io.saxreader; 
import org.dom4j.io.xmlwriter; 
import org.junit.test; 
 
public class demo01 { 
 
  @test 
  public void test() throws exception { 
 
    // 创建saxreader对象 
    saxreader reader = new saxreader(); 
    // 通过read方法读取一个文件 转换成document对象 
    document document = reader.read(new file("src/dom4j/sida.xml")); 
    //获取根节点元素对象 
    element node = document.getrootelement(); 
    //遍历所有的元素节点 
    listnodes(node); 
 
    // 获取四大名著元素节点中,子节点名称为红楼梦元素节点。 
    element element = node.element("红楼梦"); 
    //获取element的id属性节点对象 
    attribute attr = element.attribute("id"); 
    //删除属性 
    element.remove(attr); 
    //添加新的属性 
    element.addattribute("name", "作者"); 
    // 在红楼梦元素节点中添加朝代元素的节点 
    element newelement = element.addelement("朝代"); 
    newelement.settext("清朝"); 
    //获取element中的作者元素节点对象 
    element author = element.element("作者"); 
    //删除元素节点 
    boolean flag = element.remove(author); 
    //返回true代码删除成功,否则失败 
    system.out.println(flag); 
    //添加cdata区域 
    element.addcdata("红楼梦,是一部爱情小说."); 
    // 写入到一个新的文件中 
    writer(document); 
 
  } 
 
  /** 
   * 把document对象写入新的文件 
   * 
   * @param document 
   * @throws exception 
   */ 
  public void writer(document document) throws exception { 
    // 紧凑的格式 
    // outputformat format = outputformat.createcompactformat(); 
    // 排版缩进的格式 
    outputformat format = outputformat.createprettyprint(); 
    // 设置编码 
    format.setencoding("utf-8"); 
    // 创建xmlwriter对象,指定了写出文件及编码格式 
    // xmlwriter writer = new xmlwriter(new filewriter(new 
    // file("src//a.xml")),format); 
    xmlwriter writer = new xmlwriter(new outputstreamwriter( 
        new fileoutputstream(new file("src//a.xml")), "utf-8"), format); 
    // 写入 
    writer.write(document); 
    // 立即写入 
    writer.flush(); 
    // 关闭操作 
    writer.close(); 
  } 
 
  /** 
   * 遍历当前节点元素下面的所有(元素的)子节点 
   * 
   * @param node 
   */ 
  public void listnodes(element node) { 
    system.out.println("当前节点的名称::" + node.getname()); 
    // 获取当前节点的所有属性节点 
    list<attribute> list = node.attributes(); 
    // 遍历属性节点 
    for (attribute attr : list) { 
      system.out.println(attr.gettext() + "-----" + attr.getname() 
          + "---" + attr.getvalue()); 
    } 
 
    if (!(node.gettexttrim().equals(""))) { 
      system.out.println("文本内容::::" + node.gettext()); 
    } 
 
    // 当前节点下面子节点迭代器 
    iterator<element> it = node.elementiterator(); 
    // 遍历 
    while (it.hasnext()) { 
      // 获取某个子节点对象 
      element e = it.next(); 
      // 对子节点进行遍历 
      listnodes(e); 
    } 
  } 
 
  /** 
   * 介绍element中的element方法和elements方法的使用 
   * 
   * @param node 
   */ 
  public void elementmethod(element node) { 
    // 获取node节点中,子节点的元素名称为西游记的元素节点。 
    element e = node.element("西游记"); 
    // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点) 
    element author = e.element("作者"); 
 
    system.out.println(e.getname() + "----" + author.gettext()); 
 
    // 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。 
 
    list<element> authors = e.elements("作者"); 
    for (element aut : authors) { 
      system.out.println(aut.gettext()); 
    } 
 
    // 获取西游记这个元素节点 所有元素的子节点。 
    list<element> elements = e.elements(); 
 
    for (element el : elements) { 
      system.out.println(el.gettext()); 
    } 
 
  } 
 
} 

自己适当注释部分代码观察运行效果,反复练习,希望你对dom4j有进一步的了解.

七、字符串与xml互转换案例

package dom4j; 
 
import java.io.file; 
import java.io.fileoutputstream; 
import java.io.outputstreamwriter; 
 
import org.dom4j.document; 
import org.dom4j.documenthelper; 
import org.dom4j.element; 
import org.dom4j.io.outputformat; 
import org.dom4j.io.saxreader; 
import org.dom4j.io.xmlwriter; 
import org.junit.test; 
 
public class demo02 { 
 
  @test 
  public void test() throws exception { 
 
    // 创建saxreader对象 
    saxreader reader = new saxreader(); 
    // 读取一个文件,把这个文件转换成document对象 
    document document = reader.read(new file("src//c.xml")); 
    // 获取根元素 
    element root = document.getrootelement(); 
    // 把文档转换字符串 
    string docxmltext = document.asxml(); 
    system.out.println(docxmltext); 
    system.out.println("---------------------------"); 
    // csdn元素标签根转换的内容 
    string rootxmltext = root.asxml(); 
    system.out.println(rootxmltext); 
    system.out.println("---------------------------"); 
    // 获取java元素标签 内的内容 
    element e = root.element("java"); 
    system.out.println(e.asxml()); 
 
  } 
 
  /** 
   * 创建一个document对象 往document对象中添加节点元素 转存为xml文件 
   * 
   * @throws exception 
   */ 
  public void test2() throws exception { 
 
    document document = documenthelper.createdocument();// 创建根节点 
    element root = document.addelement("csdn"); 
    element java = root.addelement("java"); 
    java.settext("java班"); 
    element ios = root.addelement("ios"); 
    ios.settext("ios班"); 
 
    writer(document); 
  } 
 
  /** 
   * 把一个文本字符串转换document对象 
   * 
   * @throws exception 
   */ 
  public void test1() throws exception { 
    string text = "<csdn><java>java班</java><net>net班</net></csdn>"; 
    document document = documenthelper.parsetext(text); 
    element e = document.getrootelement(); 
    system.out.println(e.getname()); 
    writer(document); 
  } 
 
  /** 
   * 把document对象写入新的文件 
   * 
   * @param document 
   * @throws exception 
   */ 
  public void writer(document document) throws exception { 
    // 紧凑的格式 
    // outputformat format = outputformat.createcompactformat(); 
    // 排版缩进的格式 
    outputformat format = outputformat.createprettyprint(); 
    // 设置编码 
    format.setencoding("utf-8"); 
    // 创建xmlwriter对象,指定了写出文件及编码格式 
    // xmlwriter writer = new xmlwriter(new filewriter(new 
    // file("src//a.xml")),format); 
    xmlwriter writer = new xmlwriter(new outputstreamwriter( 
        new fileoutputstream(new file("src//c.xml")), "utf-8"), format); 
    // 写入 
    writer.write(document); 
    // 立即写入 
    writer.flush(); 
    // 关闭操作 
    writer.close(); 
  } 
} 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网