dom4j的基本操作

/**   
    
    *   建立一个XML文档,文档名由输入属性决定   
    
    *   @param   filename   需建立的文件名   
    
    *   @return   返回操作结果,   0表失败,   1表成功   
    
    */   
  import   java.io.File;   
  import   java.io.FileWriter;   
  import   org.dom4j.io.XMLWriter;   
  import   org.dom4j.*;   
  public   class   CreateDoc{   
    
  public   int   createXMLFile(String   filename){   
    
        /**   返回操作结果,   0表失败,   1表成功   */   
    
        int   returnValue   =   0;   
    
        /**   建立document对象   */   
    
      Document   document   =DocumentHelper.createDocument();   
    
        /**   建立XML文档的根books   */   
    
        Element   booksElement   =   document.addElement("books");   
    
        /**   加入一行注释   */   
    
        booksElement.addComment("This   is   a   test   for   dom4j,   holen,   2004.9.11");   
    
        /**   加入第一个book节点   */   
    
        Element   bookElement   =   booksElement.addElement("book");   
    
        /**   加入show属性内容   */   
    
        bookElement.addAttribute("show","yes");   
    
        /**   加入title节点   */   
    
        Element   titleElement   =   bookElement.addElement("title");   
    
        /**   为title设置内容   */   
    
      titleElement.setText("Dom4j   Tutorials");   
    
          
    
        /**   类似的完成后两个book   */   
    
        bookElement   =   booksElement.addElement("book");   
    
        bookElement.addAttribute("show","yes");   
    
        titleElement   =   bookElement.addElement("title");   
    
        titleElement.setText("Lucene   Studing");   
    
        bookElement   =   booksElement.addElement("book");   
    
        bookElement.addAttribute("show","no");   
    
        titleElement   =   bookElement.addElement("title");   
    
        titleElement.setText("Lucene   in   Action");   
    
          
    
        /**   加入owner节点   */   
    
        Element   ownerElement   =   booksElement.addElement("owner");   
    
        ownerElement.setText("O'Reilly");   
    
          
    
        try{   
    
                /**   将document中的内容写入文件中   */   
    
              XMLWriter   writer   =   new   XMLWriter(new   FileWriter(new   File(filename)));   
    
              writer.write(document);   
    
              writer.close();   
    
                /**   执行成功,需返回1   */   
    
                returnValue   =   1;   
    
        }catch(Exception   ex){   
    
                ex.printStackTrace();   
    
        }   
    
                        
    
        return   returnValue;   
    
  }   
  public   static   void   main(String[]args){   
  CreateDoc   cd=new   CreateDoc();   
  int   i=cd.createXMLFile("D:\\mybook.xml");   
  if(i==1){   
  System.out.println("建立成功!");   
  }   
  else{   
  System.out.println("建立失败!");   
  }   
    
  }   
    }   




===================================================================


dom4j写xml文件测试:

package com.yanek.demo.xml.test;

import java.io.File;
import java.io.FileWriter;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

public class DOM4j {

 public static void main(String[] args) {
  // dom4j解析xml测试

  // 1. dom4j写xml

  /*
   * <?xml version="1.0" encoding="UTF-8"?> <actions> <action path="/test"
   * class="com.mystruts.demo.LoginAction"> <forward name="success"
   * url="hello.jsp"/> <forward name="fail" url="fail.jsp"/> </action>
   * <action path="/user" class="com.mystruts.demo.UserAction"> <forward
   * name="success" url="list.jsp"/> <forward name="fail" url="fail.jsp"/>
   * </action> </actions>
   */
  Document document = DocumentHelper.createDocument();
  Element actionsElement = document.addElement("actions");

  Element actionElement1 = actionsElement.addElement("action");
  actionElement1.addAttribute("path", "/test");
  actionElement1.addAttribute("class", "com.mystruts.demo.LoginAction");

  Element forwardElement1 = actionElement1.addElement("forward");
  forwardElement1.addAttribute("name", "success");
  forwardElement1.addAttribute("url", "hello.jsp");

  Element forwardElement2 = actionElement1.addElement("forward");
  forwardElement2.addAttribute("name", "fail");
  forwardElement2.addAttribute("url", "fail.jsp");

  Element actionElement2 = actionsElement.addElement("action");
  actionElement2.addAttribute("path", "/user");
  actionElement2.addAttribute("class", "com.mystruts.demo.UserAction");

  Element forwardElement21 = actionElement2.addElement("forward");
  forwardElement21.addAttribute("name", "success");
  forwardElement21.addAttribute("url", "list.jsp");

  Element forwardElement22 = actionElement2.addElement("forward");
  forwardElement22.addAttribute("name", "fail");
  forwardElement22.addAttribute("url", "fail.jsp");

  try {
   /** 将document中的内容写入文件中 */
   XMLWriter writer = new XMLWriter(new FileWriter(new File(
     "d:\\mystruts.xml")));
   writer.write(document);
   writer.close();
   /** 执行成功,需返回1 */

  } catch (Exception ex) {
   ex.printStackTrace();
  }

  System.out.println(document.asXML());

 }

}

生成xml:

<?xml version="1.0" encoding="UTF-8"?>
<actions><action path="/test" class="com.mystruts.demo.LoginAction"><forward name="success" url="hello.jsp"/><forward name="fail" url="fail.jsp"/></action><action path="/user" class="com.mystruts.demo.UserAction"><forward name="success" url="list.jsp"/><forward name="fail" url="fail.jsp"/></action></actions>



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/5iasp/archive/2009/06/12/4263354.aspx




=======================================================================================

import  java.io.File;
import  java.io.FileWriter;
import  java.util.Iterator;
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;

 public   class  DOM4JTest   {

      * DOM4J读写XML示例
* 
*  @param  args
*  @throws  Exception
*/ 
public   static   void  main(String[] args)   {
try    {
XMLWriter writer  =   null ; //  声明写XML的对象 
SAXReader reader  =   new  SAXReader();

             OutputFormat format  =  OutputFormat.createPrettyPrint();
format.setEncoding( " GBK " ); //  设置XML文件的编码格式 

String filePath  =   " d:\\student.xml " ;
File file  =   new  File(filePath);
if  (file.exists())   {
Document document  =  reader.read(file); //  读取XML文件 
Element root  =  document.getRootElement(); //  得到根节点 
boolean  bl  =   false ;
for  (Iterator i  =  root.elementIterator( " 学生 " ); i.hasNext();)   {
Element student  =  (Element) i.next();
if  (student.attributeValue( " sid " ).equals( " 001 " ))   {
//  修改学生sid=001的学生信息 
student.selectSingleNode( " 姓名 " ).setText( " 王五 " );
student.selectSingleNode( " 年龄 " ).setText( " 25 " );

                         writer  =   new  XMLWriter( new  FileWriter(filePath), format);
writer.write(document);
writer.close();
bl  =   true ;
break ;
} 
} 
if  (bl)   {
//  添加一个学生信息 
Element student  =  root.addElement( " 学生 " );
student.addAttribute( " sid " ,  " 100 " );
Element sid  =  student.addElement( " 编号 " );
sid.setText( " 100 " );
Element name  =  student.addElement( " 姓名 " );
name.setText( " 嘎嘎 " );
Element sex  =  student.addElement( " 性别 " );
sex.setText( " 男 " );
Element age  =  student.addElement( " 年龄 " );
age.setText( " 21 " );

                     writer  =   new  XMLWriter( new  FileWriter(filePath), format);
writer.write(document);
writer.close();
} 
}   else    {
//  新建student.xml文件并新增内容 
Document _document  =  DocumentHelper.createDocument();
Element _root  =  _document.addElement( " 学生信息 " );
Element _student  =  _root.addElement( " 学生 " );
_student.addAttribute( " sid " ,  " 001 " );
Element _id  =  _student.addElement( " 编号 " );
_id.setText( " 001 " );
Element _name  =  _student.addElement( " 姓名 " );
_name.setText( " 灰机 " );
Element _age  =  _student.addElement( " 年龄 " );
_age.setText( " 18 " );

                 writer  =   new  XMLWriter( new  FileWriter(file), format);
writer.write(_document);
writer.close();
} 
System.out.println( " 操作结束!  " );
}   catch  (Exception e)   {
e.printStackTrace();
}

     } 
}

 

执行结果应该是这样:
循环解析节点:


private   void  getAllNodes(String xml)   {
try    {
Document authtmp  =  DocumentHelper.parseText(xml);
List < Element >  list  =  authtmp.selectNodes( " //sms/node " );
for  ( int  j  =   0 ; j  <  list.size(); j ++ )   {
Element node  =  (Element) list.get(j);
nodeByNodes(node);
} 
}   catch  (Exception e)   {
e.printStackTrace();
} 
}

      private   void  nodeByNodes(Element node)   {
if  (node.element( " node " )  !=   null )   {
String id  =  node.attributeValue( " id " );
String name  =  node.attributeValue( " name " );
System.out.print(id  +   " ------- " );
System.out.println(name);
for  (Iterator i  =  node.elementIterator( " node " ); i.hasNext();)   {
Element newNode  =  (Element) i.next();
nodeByNodes(newNode);
} 
}   else    {
String id  =  node.attributeValue( " id " );
String name  =  node.attributeValue( " name " );
System.out.print(id  +   " ------- " );
System.out.println(name);
} 
}

 

其次DOM4J的解释

一.Document对象相关

1.读取XML文件,获得document对象.


SAXReader reader =   new SAXReader();
Document   document  =  reader.read( new  File( " input.xml " ));

2.解析XML形式的文本,得到document对象.


String text  =   " <members></members> ";
Document document  =  DocumentHelper.parseText(text);

3.主动创建document对象.


Document document  = DocumentHelper.createDocument();
Element root  =  document.addElement( " members " ); //  创建根节点

二.节点相关

1.获取文档的根节点.


Element rootElm  =  document.getRootElement();

2.取得某节点的单个子节点.


Element memberElm = root.element( " member " ); //  "member"是节点名

3.取得节点的文字


String text = memberElm.getText(); 
也可以用:


String text = root.elementText( " name " ); 
这个是取得根节点下的name字节点的文字.

4.取得某节点下名为"member"的所有字节点并进行遍历.


List nodes  =  rootElm.elements( " member ");

 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 ageElm = newMemberElm.addElement( " age " );

7.设置节点文字.


ageElm.setText( " 29 " );

8.删除某节点.


parentElm.remove(childElm); // childElm是待删除的节点,parentElm是其父节点

9.添加一个CDATA节点.


Element contentElm = infoElm.addElement( " content " );
contentElm.addCDATA(diary.getContent());

            contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
contentElm.clearContent(); //清除节点中的内容,CDATA亦可

 

三.属性相关. 
1.取得某节点下的某属性


Element root = document.getRootElement();    
Attribute attribute = root.attribute( " size " ); // 属性名name

2.取得属性的文字


String text = attribute.getText(); 
也可以用:


String text2 = root.element( " name " ).attributeValue( " firstname " ); 
这个是取得根节点下name字节点的属性firstname的值.

3.遍历某节点的所有属性


Element root = document.getRootElement();    
for (Iterator it = root.attributeIterator();it.hasNext();) {
Attribute attribute  =  (Attribute) it.next();
String text = attribute.getText();
System.out.println(text);
}

4.设置某节点的属性和文字.


newMemberElm.addAttribute( " name " , " sitinspring " );

5.设置属性的文字


Attribute attribute = root.attribute( " name " );
attribute.setText( " sitinspring " );

6.删除某属性


Attribute attribute = root.attribute( " size " ); // 属性名name 
root.remove(attribute);

四.将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.


XMLWriter writer = new XMLWriter( new FileWriter( " output.xml " ));


posted @ 2013-07-08 15:20  爱生活,爱编程  阅读(375)  评论(0编辑  收藏  举报