dom4j读写xml实例

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 " ));

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值