dom4j(XML解析)私人學習筆記

俗話說“好記性不如爛筆頭”,編程的海洋如此的浩大,養成做筆記的習慣是成功的一步!

此筆記主要是dom4j-1.6版本的筆記,並且筆記都是博主自己一字一字編寫和記錄,有錯誤的地方歡迎大家指正。




一、基礎知識:

1、xmlTool的功能是可以在java中操作xml文件。
使用SaxReader讀取和操作xml文件,必須導入dom4j-1.6.1.jar
使用XPath的功能,必須導入 jaxen-1.1-beta-6.jar

2、xml文件頂部頭說明:
<?xml version="1.0" encoding="UTF-8"?>


3、dom4j讀取xml的方式大概分爲兩種:
(1)讀取整個XML文件到內存中,在內存中維持DOM樹,方便且可以使用xpath,但比較耗內存空間:
代碼:
Document sa=new SAXReader().read("d:/data2.xml");
//獲取根元素
Element root = sa.getRootElement();

(2)使用SAX來讀取,特點是讀一段解析一段,並不會把整個xml文件讀取到內存中,節省內存空間。
代碼:
// 創建一個解析器的實例
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();


// 執行解析操作(PersonListHandler需要實現org.xml.sax.helpers.DefaultHandler接口)
PersonListHandler personListHandler = new PersonListHandler();
saxParser.parse("d:/data2.xml", personListHandler);


二、注意事項:

1、如果想使用特殊字符,需要進行轉義:
&lt; < 小於 
&gt; > 大於 
&amp; &   和號 
&apos; ' 省略號 
&quot; " 引號 

2、另一種防轉義方式:<!CDATA[[數據]]>。xml解析器不會對<!CDATA[[數據]]>裏面的數據進行解析,會直接原文輸出 數據。
例如:<!CDATA[["我的個人數據<私密>"]]>,最終使用dom4j解析後輸出爲 "我的個人數據<私密>"

3、如果想用dom4j創建xml的文本內容加上<!CDATA[[數據]]>來轉義,可以使用DocumentHelper.createCDATA()方法。

4、如果xml格式不正確,那麼在使用dom4j解析時,會報錯。

5、xml的元素也可以使用簡短字符結束。例如 <person></person> 可以簡寫爲 <person/>

6、使用dom4j創建xml文件時,會自動將相應的特殊字符進行轉義,例如 DocumentHelper.createText("<小米>");最終輸出 &lt;小米&gt;

7、使用dom4j創建xml時,默認創建的是 緊湊模式,可以使用OutputFormat來指定創建的模式:
OutputFormat.createPrettyPrint()  :美觀模式(易讀)
OutputFormat.createCompactFormat() :緊湊模式(不易讀但省空間)


8、被解析的xml文件必須含有有root根元素,如果xml文件一個元素都沒有,那麼解析時將會報錯。

5、使用dom4j解析xml格式的字符串時,可以使用:

DocumentHelper.parseText(xmlStr);

或者使用:

Document result = null;
SAXReader reader = new SAXReader();
String encoding = getEncoding(text);
InputSource source = new InputSource(new StringReader(text));
source.setEncoding(encoding);
result = reader.read(source);


6、xml格式是非常嚴謹的,開頭必須使用<?xml version='1.0' encoding='UTF-8'?> 來聲明當前文件是xml文件,並且 <與? 之間不能有空格,否則dom4j不認爲是個協議頭,導致解析失敗。
  並且xml是必須由<標籤></標籤>組合,少了起始或結束標籤都將解析失敗,並且是嚴格區分大小寫的,既<Root></root>是不匹配的。這兩點特性與html語言不同,html語言是不嚴謹且比較
  鬆散的語言,不區分大小寫,且少了起始或結束標籤照樣會繼續往下解析。



java代碼使用示例:

package cn.itcast.d_xml_write;

import java.io.FileOutputStream;
import java.io.OutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class TestWriteXml1 {



		// 看一下DOM樹中的節點對象
	@Test
	public void test2() throws Exception {
		// 解析XML文件,得到Document對象
		Document document = new SAXReader().read("d:/data.xml");

		// 根節點
		Element rootElement = document.getRootElement();
		System.out.println(rootElement);

		// 根節點下的子節點
		List<Element> children = rootElement.elements();
		for(Element child : children){
			System.out.println(child);
		}
	}
	

	// 寫XML文件的HelloWorld(使用dom4j的工具類 --> DOM模型 --> xml文件)
	@Test
	public void test1() throws Exception {
		// --------------------------------------------------------------------
		// 【創建DOM樹】

		// 創建一個新的Document對象
		Document document = DocumentHelper.createDocument();
		// 創建一個新的標籤對象
		Element rootElement = DocumentHelper.createElement("person-list");
		// 把這個標籤對象添加Document中,做爲此document的根元素
		document.add(rootElement);

		// --------------------------------------------------------------------
		// 【把DOM樹寫成xml文件】

		// 寫到xml文件中
		OutputStream out = new FileOutputStream("d:/data2.xml");
		XMLWriter xmlWriter = new XMLWriter(out);
		xmlWriter.write(document);
		xmlWriter.close();
	}
}


發佈了48 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章