首頁 > 後端開發 > XML/RSS教程 > dom4j 操作xml檔(全)

dom4j 操作xml檔(全)

黄舟
發布: 2017-02-09 14:14:53
原創
1701 人瀏覽過

在專案中,我們很多都用到了xml文件,無論是參數配置還是與其它系統的資料互動。
今天就來講一下Java 中使用dom4j來操作XML檔。

我們需要引入的套件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//文件包  

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

  * 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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

/**

   * 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檔案到本地

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

/**

   * 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規則,則返回失敗

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

    * 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文檔

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

/**

   * 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文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

/**

   * xmlWriteDemoByString

   * 演示String保存为xml文件

   */

  public void xmlWriteDemoByString()

  {

     String s = "";

     /** xml格式标题 "<?xml version=&#39;1.0&#39; encoding=&#39;GB2312&#39;?>" 可以不用写*/

     s = "<config>\r\n"

        +"   <ftp name=&#39;DongDian&#39;>\r\n"

        +"     <ftp-host>127.0.0.1</ftp-host>\r\n"

        +"     <ftp-port>21</ftp-port>\r\n"

        +"     <ftp-user>cxl</ftp-user>\r\n"

        +"     <ftp-pwd>longshine</ftp-pwd>\r\n"

        +"     <!-- ftp最多尝试连接次数 -->\r\n"

        +"     <ftp-try>50</ftp-try>\r\n"

        +"     <!-- ftp尝试连接延迟时间 -->\r\n"

        +"     <ftp-delay>10</ftp-delay>\r\n"

        +"  </ftp>\r\n"

        +"</config>\r\n";

     //将文件生成到classes文件夹所在的目录里   

     string2XmlFile(s,"xmlWriteDemoByString.xml");   

     //将文件生成到classes文件夹里   

     string2XmlFile(s,"classes/xmlWriteDemoByString.xml");  

  }

登入後複製

7、示範手動建立一個Document,並儲存為XML檔案

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

/**

   * 演示手动创建一个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、示範讀取檔案的特定某個節點的值

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

/**

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

  */

 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&#39;s ftp_host="+hostElement.getText());

 }

登入後複製

9、修改或刪除某個值或屬性

1

2

3

4

5

6

7

8

/** ftp节点删除ftp-host节点 */

ftpElement.remove(hostElement); 

/** ftp节点删除name属性 */

ftpElement.remove(nameAttribute);

/** 修改ftp-host的值 */

hostElement.setText("192.168.0.1"); 

/** 修改ftp节点name属性的值 */

nameAttribute.setValue("ChiFeng");

登入後複製

rrreee
9、修改或刪除某個值或屬性

rrreee


🎜🎜🎜🎜🎜 🎜以上就是 dom4j 操作xml檔案(全)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜
相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板