zoukankan      html  css  js  c++  java
  • Java操作XML文件 dom4j 篇

    在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。
    今天就来讲一下Java 中使用dom4j来操作XML文件。

    我们需要引入的包:

    //文件包 
    import java.io.ByteArrayOutputStream; 
    import java.io.File; 
    import java.io.FileWriter; 
    //工具包 
    import java.util.Iterator; 
    import java.util.List; 
    //dom4j包 
    import org.dom4j.Attribute; 
    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;

    1、将XML文件的内容转化为String

       /** 
        * doc2String 
        * 将xml文档内容转为String 
        * @return 字符串 
        * @param document 
        */ 
       public static String doc2String(Document document) 
       { 
          String s = ""; 
          try 
          { 
               //使用输出流来进行转化 
               ByteArrayOutputStream out = new ByteArrayOutputStream(); 
               //使用GB2312编码 
               OutputFormat format = new OutputFormat("  ", true, "GB2312"); 
               XMLWriter writer = new XMLWriter(out, format); 
               writer.write(document); 
               s = out.toString("GB2312"); 
          }catch(Exception ex) 
          {             
               ex.printStackTrace(); 
          }       
          return s; 
       }

    2、将符合XML格式的String 转化为XML Document

       /** 
        * string2Document 
        * 将字符串转为Document 
        * @return  
        * @param s xml格式的字符串 
        */ 
       public static Document string2Document(String s) 
       { 
          Document doc = null; 
          try 
          { 
               doc = DocumentHelper.parseText(s); 
          }catch(Exception ex) 
          {             
               ex.printStackTrace(); 
          } 
          return doc; 
       }

    3、将Document对象保存为一个xml文件到本地

       /** 
        * doc2XmlFile 
        * 将Document对象保存为一个xml文件到本地 
        * @return true:保存成功  flase:失败 
        * @param filename 保存的文件名 
        * @param document 需要保存的document对象 
        */ 
       public static boolean doc2XmlFile(Document document,String filename) 
       { 
          boolean flag = true; 
          try 
          { 
                /* 将document中的内容写入文件中 */ 
                //默认为UTF-8格式,指定为"GB2312" 
                OutputFormat format = OutputFormat.createPrettyPrint(); 
                format.setEncoding("GB2312"); 
                XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format); 
                writer.write(document); 
                writer.close();             
            }catch(Exception ex) 
            { 
                flag = false; 
                ex.printStackTrace(); 
            } 
            return flag;       
       }

    4、将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败

       /** 
        * string2XmlFile 
        * 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败 
        * @return true:保存成功  flase:失败 
        * @param filename 保存的文件名 
        * @param str 需要保存的字符串 
        */ 
       public static boolean string2XmlFile(String str,String filename) 
       { 
          boolean flag = true; 
          try 
          { 
             Document doc =  DocumentHelper.parseText(str);        
             flag = doc2XmlFile(doc,filename); 
          }catch (Exception ex) 
          { 
             flag = false; 
             ex.printStackTrace(); 
          } 
          return flag; 
       }

    5、载入一个xml文档

       /** 
        * load 
        * 载入一个xml文档 
        * @return 成功返回Document对象,失败返回null 
        * @param uri 文件路径 
        */ 
       public static Document load(String filename) 
       { 
          Document document = null; 
          try  
          {  
              SAXReader saxReader = new SAXReader(); 
              document = saxReader.read(new File(filename)); 
          } 
          catch (Exception ex){ 
              ex.printStackTrace(); 
          }   
          return document; 
       }

     6、演示String保存为xml文件

       /** 
        * xmlWriteDemoByString 
        * 演示String保存为xml文件 
        */ 
       public void xmlWriteDemoByString() 
       { 
          String s = ""; 
          /** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写*/ 
          s = "<config> " 
             +"   <ftp name='DongDian'> " 
             +"     <ftp-host>127.0.0.1</ftp-host> " 
             +"     <ftp-port>21</ftp-port> " 
             +"     <ftp-user>cxl</ftp-user> " 
             +"     <ftp-pwd>longshine</ftp-pwd> " 
             +"     <!-- ftp最多尝试连接次数 --> " 
             +"     <ftp-try>50</ftp-try> " 
             +"     <!-- ftp尝试连接延迟时间 --> " 
             +"     <ftp-delay>10</ftp-delay> " 
             +"  </ftp> " 
             +"</config> "; 
          //将文件生成到classes文件夹所在的目录里    
          string2XmlFile(s,"xmlWriteDemoByString.xml");    
          //将文件生成到classes文件夹里    
          string2XmlFile(s,"classes/xmlWriteDemoByString.xml");   
       }

    7、演示手动创建一个Document,并保存为XML文件

       /** 
        * 演示手动创建一个Document,并保存为XML文件 
        */ 
       public void xmlWriteDemoByDocument() 
       { 
            /** 建立document对象 */ 
            Document document = DocumentHelper.createDocument(); 
            /** 建立config根节点 */ 
            Element configElement = document.addElement("config"); 
            /** 建立ftp节点 */ 
            configElement.addComment("东电ftp配置"); 
            Element ftpElement = configElement.addElement("ftp"); 
            ftpElement.addAttribute("name","DongDian"); 
            /** ftp 属性配置 */ 
            Element hostElement = ftpElement.addElement("ftp-host"); 
            hostElement.setText("127.0.0.1"); 
            (ftpElement.addElement("ftp-port")).setText("21"); 
            (ftpElement.addElement("ftp-user")).setText("cxl"); 
            (ftpElement.addElement("ftp-pwd")).setText("longshine"); 
            ftpElement.addComment("ftp最多尝试连接次数"); 
            (ftpElement.addElement("ftp-try")).setText("50"); 
            ftpElement.addComment("ftp尝试连接延迟时间"); 
            (ftpElement.addElement("ftp-delay")).setText("10");     
            /** 保存Document */ 
            doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml"); 
       }

    8、演示读取文件的具体某个节点的值

       /** 
        *  演示读取文件的具体某个节点的值  
        */ 
       public static void xmlReadDemo() 
       { 
          Document doc = load("classes/xmlWriteDemoByDocument.xml"); 
          //Element root = doc.getRootElement(); 
          /** 先用xpath查找所有ftp节点 并输出它的name属性值*/ 
          List list = doc.selectNodes("/config/ftp" ); 
          Iterator it = list.iterator(); 
          while(it.hasNext()) 
          {    
              Element ftpElement = (Element)it.next(); 
              System.out.println("ftp_name="+ftpElement.attribute("name").getValue()); 
          } 
          /** 直接用属性path取得name值 */ 
          list = doc.selectNodes("/config/ftp/@name" ); 
          it = list.iterator(); 
          while(it.hasNext()) 
          {    
              Attribute attribute = (Attribute)it.next(); 
              System.out.println("@name="+attribute.getValue()); 
          } 
          /** 直接取得DongDian ftp的 ftp-host 的值 */ 
          list = doc.selectNodes("/config/ftp/ftp-host" ); 
          it = list.iterator(); 
          Element hostElement=(Element)it.next(); 
          System.out.println("DongDian's ftp_host="+hostElement.getText()); 
       }

    9、修改或删除某个值或属性

    /** ftp节点删除ftp-host节点 */ 
    ftpElement.remove(hostElement);  
    /** ftp节点删除name属性 */ 
    ftpElement.remove(nameAttribute); 
    /** 修改ftp-host的值 */ 
    hostElement.setText("192.168.0.1");  
    /** 修改ftp节点name属性的值 */ 
    nameAttribute.setValue("ChiFeng");

    ---------------------------------JoeCom 2006-11-11

  • 相关阅读:
    [蓝桥杯][基础训练]报时助手
    [蓝桥杯][基础训练]分解质因数
    [蓝桥杯][基础训练]2n皇后问题
    [啊哈算法]我要做月老
    [啊哈算法]关键道路(图的割边)
    [啊哈算法]重要城市(图的割点)
    并查集
    栈数组与栈链表代码实现

    循环链表
  • 原文地址:https://www.cnblogs.com/hyk110988/p/3577895.html
Copyright © 2011-2022 走看看