dom4j的基本操作

来源:互联网 发布:linux如何退出vi 编辑:程序博客网 时间:2024/06/14 05:30
/**           *   建立一个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 " ); // 属性名name2.取得属性的文字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 " ));

原创粉丝点击