此筆記主要是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、如果想使用特殊字符,需要進行轉義:
< <
小於
> >
大於
& & 和號
' '
省略號
" "
引號
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("<小米>");最終輸出 <小米>
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();
}
}