DOM4J的簡單介紹

解析XML文件的主流技術包括:DOM、JDOM、SAX和DOM4J;

DOM4J是一個十分優秀的開源框架(易用、開源)。使用比較廣泛, SUNJAXM也在用DOM4J Hibernate用它來讀寫配置文件等。它應用於Java平臺,採用了Java集合框架並完全支持DOMSAXJAXPDOM4J的使用非常簡單,在使用的過程中,只需要通過查詢幫助文檔和相關的技術博客即可完成常規的操作。【當XML文檔較大且不考慮平臺移植性時,建議採用DOM4J

這裏簡單介紹DOM4J對XML文件內容的解析和對XPath的支持。

1、迭代方式解析XML文件內容及標籤屬性

private static void readNodes(Element node){
        //首先獲取當前節點的所有屬性
        List<Attribute> list = node.attributes();
        
        //遍歷節點屬性  
        for(Attribute attribute : list){  
            System.out.print("\n");  
            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();  
            readNodes(e);  
        }  
	}
2、對XPath的支持,直接讀取指定標籤下的值(name和age
 需要引入jaxen-xx-xx.jar,否則會報java.lang.NoClassDefFoundError: org/jaxen/JaxenException異常

	private static void readNodesByXPath(Document document){
		List list = document.selectNodes("/students/student/name");
		for (int i = 0; i < list.size(); i++) {
			Element node = (Element) list.get(i);
			System.out.println(node.getName()+"-"+node.getTextTrim());
		}
		
		System.out.println("----------------------------------------");
		
		List list2 = document.selectNodes("/students/student/age");
		for (int i = 0; i < list2.size(); i++) {
			Element node = (Element) list2.get(i);
			System.out.println(node.getName()+"-"+node.getTextTrim());
		}
		
	}
3、項目中有時會遇到一種情況,要求請求的入參(XML)格式比複雜,但有效的參數就幾個
 首先編輯好XML待用,然後讀取並添加有效參數即可,接下來以student.xml爲例,添加參數

	private static void addAndUpdateXml(Document document) {
		//XPath查找param1和param2節點
		Node node = document.selectSingleNode("/students/student/param1");
		node.setText("1");
		
		Node node2 = document.selectSingleNode("/students/student/param2");
		node2.setText("2");
		
		System.out.println(document.asXML());
	}

4、代碼調用測試方法

讀寫XML文檔主要依賴於org.dom4j.io包,其中提供了DOMReaderSAXReader兩類不同方式。因爲利用了相同的接口,所以他們的調用方式是相同的。

	public static void main(String[] args) throws Exception {
		ReadXml();
	}
	
	public static void ReadXml() throws Exception{
		   //1.創建SAXReader對象  
        SAXReader reader = new SAXReader();  
        //2.讀取文件 
        InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("students.xml");
        if(ins == null){
        	throw new Exception("獲取文件失敗或文件不存在!");
        }
        Document document = reader.read(ins);  
        //3.獲取根節點元素對象  
        Element root = document.getRootElement();  
        
        //解析 - 遍歷 
        readNodes(root);  
        
        //解析 - XPath讀取指定標籤下的值
        readNodesByXPath(document);
        
        //讀取xml文件,添加和更改數值
        addAndUpdateXml(document);
	}

分析:代碼片段中爲讀取項目源文件路徑下的students.xml文件;SAXReader的read方法是重載的,可以從InputStream, File, Url等多種不同的源讀取,得到的Document對象就代表了整個XML。一切XML解析都是從Root元素開始的,所以首先通過Document獲取Root

5、student.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student id='0001'>
		<name>stu01</name>
		<age>20</age>
		<sex>男</sex>
		<param1></param1>
	</student>
	<student id='0002'>
		<name>stu02</name>
		<age>22</age>
		<sex>女</sex>
		<param2></param2>
	</student>
</students>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章