程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> bean-利用dom4j解析spring.xml

bean-利用dom4j解析spring.xml

編輯:編程解疑
利用dom4j解析spring.xml

<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">








最佳回答:


1)自己創建Document對象
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
Document document = DocumentHelper.createDocument();

Element root = document.addElement("students");

其中students是根節點,可以繼續添加其他節點等操作。
(2)讀取XML文件獲取Document對象
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
//創建SAXReader對象

SAXReader reader = new SAXReader();

//讀取文件 轉換成Document

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

(3)讀取XML文本內容獲取Document對象
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
String xmlStr = "......";

Document document = DocumentHelper.parseText(xmlStr);

3、示例
(1)xml文件內容如下
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
<?xml version="1.0" encoding="UTF-8"?>





<微信公眾號>@殘缺的孤獨</微信公眾號>

<學號>20140101</學號>

<地址>北京海澱區</地址>

<座右銘>要麼強大,要麼聽話</座右銘>





<新浪微博>@殘缺的孤獨</新浪微博>

<學號>20140102</學號>

<地址>北京朝陽區</地址>

<座右銘>在哭泣中學會堅強</座右銘>





(2)解析過程
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
package cn.com.yy.dom4j;

import java.io.File;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.junit.Test;

public class Dom4JforXML {

@Test  
public void test() throws Exception{  
    //創建SAXReader對象  
    SAXReader reader = new SAXReader();  
    //讀取文件 轉換成Document  
    Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));  
    //獲取根節點元素對象  
    Element root = document.getRootElement();  
    //遍歷  
    listNodes(root);  
}  

//遍歷當前節點下的所有節點  
public void listNodes(Element node){  
    System.out.println("當前節點的名稱:" + node.getName());  
    //首先獲取當前節點的所有屬性節點  
    List<Attribute> list = node.attributes();  
    //遍歷屬性節點  
    for(Attribute attribute : list){  
        System.out.println("屬性"+attribute.getName() +":" + attribute.getValue());  
    }  
    //如果當前節點內容不為空,則輸出  
    if(!(node.getTextTrim().equals(""))){  
         System.out.println( node.getName() + ":" + node.getText());    
    }  
    //同時迭代當前節點下面的所有子節點  
    //使用遞歸  
    Iterator<Element> iterator = node.elementIterator();  
    while(iterator.hasNext()){  
        Element e = iterator.next();  
        listNodes(e);  
    }  
}  

}

(3)解析結果
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
當前節點的名稱:students

當前節點的名稱:student1

屬性id:001

當前節點的名稱:微信公眾號

微信公眾號:@殘缺的孤獨

當前節點的名稱:學號

學號:20140101

當前節點的名稱:地址

地址:北京海澱區

當前節點的名稱:座右銘

座右銘:要麼強大,要麼聽話

當前節點的名稱:student2

屬性id:002

當前節點的名稱:新浪微博

新浪微博:@殘缺的孤獨

當前節點的名稱:學號

學號:20140102

當前節點的名稱:地址

地址:北京朝陽區

當前節點的名稱:座右銘

座右銘:在哭泣中學會堅強

4、dom4j操作節點屬性
使用dom4j可以操作節點屬性,比如添加節點屬性、刪除節點屬性、修改屬性值等操作。下面使用dom4j為上述的student1節點刪除id屬性,新添name屬性。
(1)代碼示例
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
@Test

public void test2()throws Exception{

//創建SAXReader對象

SAXReader reader = new SAXReader();

//讀取文件 轉換成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//獲取根節點元素對象

Element root = document.getRootElement();

    System.out.println("-------添加屬性前------");  
    //獲取節點student1  
    Element student1Element = root.element("student1");  
    //遍歷  
    listNodes(student1Element);  
    //獲取其屬性  
    Attribute idAttribute = student1Element.attribute("id");  
    //刪除其屬性  
    student1Element.remove(idAttribute);  
    //為其添加新屬性  
    student1Element.addAttribute("name", "這是student1節點的新屬性");  
    System.out.println("-------添加屬性後------");  
    listNodes(student1Element);  
}  

(2)結果
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
-------添加屬性前------

當前節點的名稱:student1

屬性id:001

當前節點的名稱:微信公眾號

微信公眾號:@殘缺的孤獨

當前節點的名稱:學號

學號:20140101

當前節點的名稱:地址

地址:北京海澱區

當前節點的名稱:座右銘

座右銘:要麼強大,要麼聽話

-------添加屬性後------

當前節點的名稱:student1

屬性name:這是student1節點的新屬性

當前節點的名稱:微信公眾號

微信公眾號:@殘缺的孤獨

當前節點的名稱:學號

學號:20140101

當前節點的名稱:地址

地址:北京海澱區

當前節點的名稱:座右銘

座右銘:要麼強大,要麼聽話

5、dom4j新增節點
使用dom4j可以刪除指定節點、新增節點等操作,我們使用dom4j為student1節點新增phone節點,如下。
(1)代碼
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
//添加節點

@Test

public void test3()throws Exception{

//創建SAXReader對象

SAXReader reader = new SAXReader();

//讀取文件 轉換成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//獲取根節點元素對象

Element root = document.getRootElement();

System.out.println("-------添加節點前------");

//獲取節點student1

Element student1Element = root.element("student1");

//遍歷

listNodes(student1Element);

//添加phone節點

Element phoneElement = student1Element.addElement("phone");

//為phone節點設置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加節點後------");

listNodes(student1Element);

}

(2)結果
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
-------添加節點前------

當前節點的名稱:student1

屬性id:001

當前節點的名稱:微信公眾號

微信公眾號:@殘缺的孤獨

當前節點的名稱:學號

學號:20140101

當前節點的名稱:地址

地址:北京海澱區

當前節點的名稱:座右銘

座右銘:要麼強大,要麼聽話

-------添加節點後------

當前節點的名稱:student1

屬性id:001

當前節點的名稱:微信公眾號

微信公眾號:@殘缺的孤獨

當前節點的名稱:學號

學號:20140101

當前節點的名稱:地址

地址:北京海澱區

當前節點的名稱:座右銘

座右銘:要麼強大,要麼聽話

當前節點的名稱:phone

phone:137xxxxxxxx

6、把Document對象寫入新的文件
有時,我們需要把document對象寫入新的文件,dom4j提供了對應的API以便我們進行操作。我們在完成第 5 後,把document寫入新的文件s1.xml,如下。
(1)代碼
[java] view plain copy print?在CODE上查看代碼片派生到我的代碼片
//添加節點後,寫入新的文件

@Test

public void test4()throws Exception{

//創建SAXReader對象

SAXReader reader = new SAXReader();

//讀取文件 轉換成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//獲取根節點元素對象

Element root = document.getRootElement();

System.out.println("-------添加節點前------");

//獲取節點student1

Element student1Element = root.element("student1");

//遍歷

listNodes(student1Element);

//添加phone節點

Element phoneElement = student1Element.addElement("phone");

//為phone節點設置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加節點後------");

listNodes(student1Element);

//把student1Element寫入新文件

writerDocumentToNewFile(document);

System.out.println("---寫入完畢----");

}

//document寫入新的文件  
public void writerDocumentToNewFile(Document document)throws Exception{  
    //輸出格式  
    OutputFormat format = OutputFormat.createPrettyPrint();  
    //設置編碼  
    format.setEncoding("UTF-8");  
    //XMLWriter 指定輸出文件以及格式  
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/cn/com/yy/dom4j/s1.xml")),"UTF-8"), format);  

    //寫入新文件  
    writer.write(document);  
    writer.flush();  
    writer.close();  
}  

(2)查看s1.xml文件
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
<?xml version="1.0" encoding="UTF-8"?>





<微信公眾號>@殘缺的孤獨</微信公眾號>

<學號>20140101</學號>

<地址>北京海澱區</地址>

<座右銘>要麼強大,要麼聽話</座右銘>

137xxxxxxxx





<新浪微博>@殘缺的孤獨</新浪微博>

<學號>20140102</學號>

<地址>北京朝陽區</地址>

<座右銘>在哭泣中學會堅強</座右銘>



因為涉及到中文,所以在輸出時要設定UTF8編碼,OutputStreamWriter進行設置編碼。
還有輸出格式的問題,在此處使用的是OutputFormat.createPrettyPrint(),輸出文檔時進行了排版格式化。還有一種是OutputFormat.createCompactFormat()方法,輸出內容是一行,沒有進行格式化,是緊湊型的輸出。如下:
[html] view plain copy print?在CODE上查看代碼片派生到我的代碼片
<?xml version="1.0" encoding="UTF-8"?>

<微信公眾號>@殘缺的孤獨</微信公眾號><學號>20140101</學號><地址>北京海澱區</地址><座右銘>要麼強大,要麼聽話</座右銘>137xxxxxxxx<新浪微博>@殘缺的孤獨</新浪微博><學號>20140102</學號><地址>北京朝陽區</地址><座右銘>在哭泣中學會堅強</座右銘>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved