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

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/study-development/p/3527462.html
Copyright © 2011-2022 走看看