天天看點

dom4j讀寫xml檔案 (轉)

首先我們給出一段示例程式:

1.讀取XML檔案,獲得document對象.

dom4j讀寫xml檔案 (轉)

import  java.io.File;

dom4j讀寫xml檔案 (轉)

import  java.io.FileWriter;

dom4j讀寫xml檔案 (轉)

import  java.util.Iterator;

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

import  org.dom4j.Document;

dom4j讀寫xml檔案 (轉)

import  org.dom4j.DocumentHelper;

dom4j讀寫xml檔案 (轉)

import  org.dom4j.Element;

dom4j讀寫xml檔案 (轉)

import  org.dom4j.io.OutputFormat;

dom4j讀寫xml檔案 (轉)

import  org.dom4j.io.SAXReader;

dom4j讀寫xml檔案 (轉)

import  org.dom4j.io.XMLWriter;

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

public   class  DOM4JTest 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

    public static void main(String[] args) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        try 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            XMLWriter writer = null;// 聲明寫XML的對象

dom4j讀寫xml檔案 (轉)

            SAXReader reader = new SAXReader();

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            OutputFormat format = OutputFormat.createPrettyPrint();

dom4j讀寫xml檔案 (轉)

            format.setEncoding("GBK");// 設定XML檔案的編碼格式

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            String filePath = "d://student.xml";

dom4j讀寫xml檔案 (轉)

            File file = new File(filePath);

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            if (file.exists()) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                Document document = reader.read(file);// 讀取XML檔案

dom4j讀寫xml檔案 (轉)

                Element root = document.getRootElement();// 得到根節點

dom4j讀寫xml檔案 (轉)

                boolean bl = false;

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                for (Iterator i = root.elementIterator("學生"); i.hasNext();) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                    Element student = (Element) i.next();

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                    if (student.attributeValue("sid").equals("001")) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                        // 修改學生sid=001的學生資訊

dom4j讀寫xml檔案 (轉)

                        student.selectSingleNode("姓名").setText("王五");

dom4j讀寫xml檔案 (轉)

                        student.selectSingleNode("年齡").setText("25");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                        writer = new XMLWriter(new FileWriter(filePath), format);

dom4j讀寫xml檔案 (轉)

                        writer.write(document);

dom4j讀寫xml檔案 (轉)

                        writer.close();

dom4j讀寫xml檔案 (轉)

                        bl = true;

dom4j讀寫xml檔案 (轉)

                        break;

dom4j讀寫xml檔案 (轉)

                    }

dom4j讀寫xml檔案 (轉)

                }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                if (bl) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                    // 添加一個學生資訊

dom4j讀寫xml檔案 (轉)

                    Element student = root.addElement("學生");

dom4j讀寫xml檔案 (轉)

                    student.addAttribute("sid", "100");

dom4j讀寫xml檔案 (轉)

                    Element sid = student.addElement("編号");

dom4j讀寫xml檔案 (轉)

                    sid.setText("100");

dom4j讀寫xml檔案 (轉)

                    Element name = student.addElement("姓名");

dom4j讀寫xml檔案 (轉)

                    name.setText("嘎嘎");

dom4j讀寫xml檔案 (轉)

                    Element sex = student.addElement("性别");

dom4j讀寫xml檔案 (轉)

                    sex.setText("男");

dom4j讀寫xml檔案 (轉)

                    Element age = student.addElement("年齡");

dom4j讀寫xml檔案 (轉)

                    age.setText("21");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                    writer = new XMLWriter(new FileWriter(filePath), format);

dom4j讀寫xml檔案 (轉)

                    writer.write(document);

dom4j讀寫xml檔案 (轉)

                    writer.close();

dom4j讀寫xml檔案 (轉)

                }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            } else 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                // 建立student.xml檔案并新增内容

dom4j讀寫xml檔案 (轉)

                Document _document = DocumentHelper.createDocument();

dom4j讀寫xml檔案 (轉)

                Element _root = _document.addElement("學生資訊");

dom4j讀寫xml檔案 (轉)

                Element _student = _root.addElement("學生");

dom4j讀寫xml檔案 (轉)

                _student.addAttribute("sid", "001");

dom4j讀寫xml檔案 (轉)

                Element _id = _student.addElement("編号");

dom4j讀寫xml檔案 (轉)

                _id.setText("001");

dom4j讀寫xml檔案 (轉)

                Element _name = _student.addElement("姓名");

dom4j讀寫xml檔案 (轉)

                _name.setText("灰機");

dom4j讀寫xml檔案 (轉)

                Element _age = _student.addElement("年齡");

dom4j讀寫xml檔案 (轉)

                _age.setText("18");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

                writer = new XMLWriter(new FileWriter(file), format);

dom4j讀寫xml檔案 (轉)

                writer.write(_document);

dom4j讀寫xml檔案 (轉)

                writer.close();

dom4j讀寫xml檔案 (轉)

            }

dom4j讀寫xml檔案 (轉)

            System.out.println("操作結束! ");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        } catch (Exception e) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            e.printStackTrace();

dom4j讀寫xml檔案 (轉)

        }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

    }

dom4j讀寫xml檔案 (轉)

}

執行結果應該是這樣:

dom4j讀寫xml檔案 (轉)

循環解析節點:

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

private   void  getAllNodes(String xml) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        try 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            Document authtmp = DocumentHelper.parseText(xml);

dom4j讀寫xml檔案 (轉)

            List<Element> list = authtmp.selectNodes("//sms/node");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            for (int j = 0; j < list.size(); j++) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                Element node = (Element) list.get(j);

dom4j讀寫xml檔案 (轉)

                nodeByNodes(node);

dom4j讀寫xml檔案 (轉)

            }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        } catch (Exception e) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            e.printStackTrace();

dom4j讀寫xml檔案 (轉)

        }

dom4j讀寫xml檔案 (轉)

    }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

     private   void  nodeByNodes(Element node) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        if (node.element("node") != null) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            String id = node.attributeValue("id");

dom4j讀寫xml檔案 (轉)

            String name = node.attributeValue("name");

dom4j讀寫xml檔案 (轉)

            System.out.print(id + "-------");

dom4j讀寫xml檔案 (轉)

            System.out.println(name);

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

            for (Iterator i = node.elementIterator("node"); i.hasNext();) 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

                Element newNode = (Element) i.next();

dom4j讀寫xml檔案 (轉)

                nodeByNodes(newNode);

dom4j讀寫xml檔案 (轉)

            }

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

        } else 

dom4j讀寫xml檔案 (轉)

{

dom4j讀寫xml檔案 (轉)

            String id = node.attributeValue("id");

dom4j讀寫xml檔案 (轉)

            String name = node.attributeValue("name");

dom4j讀寫xml檔案 (轉)

            System.out.print(id + "-------");

dom4j讀寫xml檔案 (轉)

            System.out.println(name);

dom4j讀寫xml檔案 (轉)

        }

dom4j讀寫xml檔案 (轉)

    }

其次DOM4J的解釋

一.Document對象相關

dom4j讀寫xml檔案 (轉)

      SAXReader reader =   new SAXReader();

dom4j讀寫xml檔案 (轉)

      Document   document  =  reader.read( new  File( " input.xml " ));

2.解析XML形式的文本,得到document對象.

dom4j讀寫xml檔案 (轉)

       String text  =   " <members></members> ";

dom4j讀寫xml檔案 (轉)

      Document document  =  DocumentHelper.parseText(text);

3.主動建立document對象.

dom4j讀寫xml檔案 (轉)

      Document document  = DocumentHelper.createDocument();

dom4j讀寫xml檔案 (轉)

      Element root  =  document.addElement( " members " ); //  建立根節點

二.節點相關

1.擷取文檔的根節點.

dom4j讀寫xml檔案 (轉)

      Element rootElm  =  document.getRootElement();

2.取得某節點的單個子節點.

dom4j讀寫xml檔案 (轉)

      Element memberElm = root.element( " member " ); //  "member"是節點名

3.取得節點的文字

dom4j讀寫xml檔案 (轉)

      String text = memberElm.getText();

也可以用:

dom4j讀寫xml檔案 (轉)

      String text = root.elementText( " name " );

這個是取得根節點下的name位元組點的文字.

4.取得某節點下名為"member"的所有位元組點并進行周遊.

dom4j讀寫xml檔案 (轉)

List nodes  =  rootElm.elements( " member ");

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

for  (Iterator it  =  nodes.iterator(); it.hasNext();)  {

dom4j讀寫xml檔案 (轉)

    Element elm = (Element) it.next();

dom4j讀寫xml檔案 (轉)

   // do something

dom4j讀寫xml檔案 (轉)

}

5.對某節點下的所有子節點進行周遊.

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

  for (Iterator it = root.elementIterator();it.hasNext();) {

dom4j讀寫xml檔案 (轉)

                 Element element = (Element) it.next();

dom4j讀寫xml檔案 (轉)

                // do something

dom4j讀寫xml檔案 (轉)

             }

6.在某節點下添加子節點.

dom4j讀寫xml檔案 (轉)

Element ageElm = newMemberElm.addElement( " age " );

7.設定節點文字.

dom4j讀寫xml檔案 (轉)

ageElm.setText( " 29 " );

8.删除某節點.

dom4j讀寫xml檔案 (轉)

parentElm.remove(childElm); // childElm是待删除的節點,parentElm是其父節點

9.添加一個CDATA節點.

dom4j讀寫xml檔案 (轉)

         Element contentElm = infoElm.addElement( " content " );

dom4j讀寫xml檔案 (轉)

         contentElm.addCDATA(diary.getContent());

            contentElm.getText(); // 特别說明:擷取節點的CDATA值與擷取節點的值是一個方法

            contentElm.clearContent(); //清除節點中的内容,CDATA亦可

三.屬性相關.

1.取得某節點下的某屬性

dom4j讀寫xml檔案 (轉)

             Element root = document.getRootElement();    

dom4j讀寫xml檔案 (轉)

             Attribute attribute = root.attribute( " size " ); // 屬性名name

2.取得屬性的文字

dom4j讀寫xml檔案 (轉)

             String text = attribute.getText();

也可以用:

dom4j讀寫xml檔案 (轉)

String text2 = root.element( " name " ).attributeValue( " firstname " );

這個是取得根節點下name位元組點的屬性firstname的值.

3.周遊某節點的所有屬性

dom4j讀寫xml檔案 (轉)

  Element root = document.getRootElement();    

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

             for (Iterator it = root.attributeIterator();it.hasNext();) {

dom4j讀寫xml檔案 (轉)

                 Attribute attribute = (Attribute) it.next();

dom4j讀寫xml檔案 (轉)

                 String text=attribute.getText();

dom4j讀寫xml檔案 (轉)

                 System.out.println(text);

dom4j讀寫xml檔案 (轉)

             }

4.設定某節點的屬性和文字.

dom4j讀寫xml檔案 (轉)

newMemberElm.addAttribute( " name " , " sitinspring " );

5.設定屬性的文字

dom4j讀寫xml檔案 (轉)

             Attribute attribute = root.attribute( " name " );

dom4j讀寫xml檔案 (轉)

             attribute.setText( " sitinspring " );

6.删除某屬性

dom4j讀寫xml檔案 (轉)

             Attribute attribute = root.attribute( " size " ); // 屬性名name

dom4j讀寫xml檔案 (轉)

             root.remove(attribute);

四.将文檔寫入XML檔案.

1.文檔中全為英文,不設定編碼,直接寫入的形式.

dom4j讀寫xml檔案 (轉)

XMLWriter writer = new XMLWriter( new FileWriter( " output.xml " ));

dom4j讀寫xml檔案 (轉)

writer.write(document);

dom4j讀寫xml檔案 (轉)

writer.close();

2.文檔中含有中文,設定編碼格式寫入的形式.

dom4j讀寫xml檔案 (轉)

             OutputFormat format = OutputFormat.createPrettyPrint();

dom4j讀寫xml檔案 (轉)

             format.setEncoding( " GBK " );     // 指定XML編碼        

dom4j讀寫xml檔案 (轉)

             XMLWriter writer = new XMLWriter( new FileWriter( " output.xml " ),format);

dom4j讀寫xml檔案 (轉)
dom4j讀寫xml檔案 (轉)

             writer.write(document);

dom4j讀寫xml檔案 (轉)

             writer.close();

五.字元串與XML的轉換

1.将字元串轉化為XML

dom4j讀寫xml檔案 (轉)

String text = " <members> <member>sitinspring</member> </members> " ;

dom4j讀寫xml檔案 (轉)

Document document = DocumentHelper.parseText(text);

2.将文檔或節點的XML轉化為字元串.

dom4j讀寫xml檔案 (轉)

             SAXReader reader = new SAXReader();

dom4j讀寫xml檔案 (轉)

             Document   document = reader.read( new File( " input.xml " ));            

dom4j讀寫xml檔案 (轉)

             Element root = document.getRootElement();                

dom4j讀寫xml檔案 (轉)

             String docXmlText = document.asXML();

dom4j讀寫xml檔案 (轉)

             String rootXmlText = root.asXML();

dom4j讀寫xml檔案 (轉)

             Element memberElm = root.element( " member " );

dom4j讀寫xml檔案 (轉)

             String memberXmlText = memberElm.asXML();