第一部分XML dom4j
1.Dom4j是一個簡單、靈活的開放源代碼的庫。Dom4j是由早期開發JDOM的人分離出來而後獨立開發的。與JDOM不同的是,dom4j使用接口和抽象基類,雖然Dom4j的API相對要複雜一些,但它提供了比JDOM更好的靈活性。
2.Dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極易使用的特點。現在很多軟體采用的Dom4j,例如Hibernate。使用Dom4j開發,需下載下傳dom4j相應的jar檔案。
3.擷取Document對象
<col>
SAXReader reader = new SAXReader();
Document document = reader.read(new File( “input.xml“ ));
4.元素操作
• //擷取文檔的元素.
Element root = document.getRootElement();
• //擷取某個元素的指定名稱的第一個子節點
Element element = element.element(“書名”);
• //擷取某個元素的指定名稱的所有子元素的集合
List list = element.elements(“書名”);
• //添加一個指定名稱的子元素
Element childEle = parentEle.addElement(“書名”);
• //删除某個元素指定的子元素
parentEle.remove(childEle);
5.屬性操作
• //擷取某個元素的指定名稱的屬性對象
Attribute attr = element.attribute(“id”);
• //擷取某個元素的指定名稱的屬性值
String id = element.attributeValue(“id”);
• //給元素添加屬性或更新其值
Attribute attr = element.addAttribute(“id”,”123”);
• //删除某個元素的指定屬性
element.remove(attribute);
6.文本操作
• //擷取某個元素的文本内容
String text = element.getText();
• //給某個元素添加或更新文本内容
element.setText(“Tom”);
7.将文檔寫入XML檔案,使更改生效
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter( newFileOutput( “output.xml“ ),format);
writer.write(document);
writer.close();
8.練習:
①查找某一個節點: 查找id為007的學員的所有資訊
②添加某一個節點: “姓名:王五,id:134,年齡:18
第四部分:XPath
XPath 是在 XML 文檔中查找資訊的語言
XPath 是通過元素和屬性進行查找
XPath簡化了Dom4j查找節點的過程
使用XPath必須導入jaxen-1.1-beta-6.jar
否則出現
NoClassDefFoundError: org/jaxen/JaxenException
2.XPath文法示例
/students/student
從根元素開始逐層找,以”/”開頭
//name
直接擷取所有name元素對象,以“//”開頭
//student/*
擷取所有student元素的所有子元素對象
//student[1]或//student[last()]
擷取所有student元素的第一個或最後一個
//student[@id]
擷取所有帶id屬性的student元素對象
//student[@id=‘002′]
擷取id等于002的student元素對象
3.查詢節點
• 擷取所有符合條件的節點
– document.selectNodes(String xpathExpression) 傳回List集合
• 擷取符合條件的單個節點
– document.selectSingleNode(String xpathExpression)
– 傳回一個Node對象。如果符合條件的節點有多個,那麼傳回第一個。
4.練習:
①查找id為007的學員姓名
②查找所有的學員姓名
第五部分:XML SAX解析
為什麼會出現SAX解析?
在使用 DOM 解析 XML 文檔時,需要讀取整個 XML 文檔,在記憶體中構架代表整個 DOM 樹的Doucment對象,進而再對XML文檔進行操作。此種情況下,如果 XML 文檔特别大,就會消耗計算機的大量記憶體,并且容易導緻記憶體溢出。
SAX解析允許在讀取文檔的時候,即對文檔進行處理,而不必等到整個文檔裝載完才會文檔進行操作。
注意:sax隻能用于讀取xml檔案,無法作更新
SAX采用事件處理的方式解析XML檔案,利用 SAX 解析 XML 文檔,涉及兩個部分:解析器和事件處理器(對象):
解析器可以使用JAXP的API建立,建立出SAX解析器後,就可以指定解析器去解析某個XML文檔。
解析器采用SAX方式在解析某個XML文檔時,它隻要解析到XML文檔的一個組成部分,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把目前解析到的xml檔案内容作為方法的參數傳遞給事件處理器。
事件處理器由程式員編寫,程式員通過事件處理器中方法的參數,就可以很輕松地得到sax解析器解析到的資料,進而可以決定如何對資料進行處理。
3.解析方式
• 使用SAXParserFactory建立SAX解析工廠
SAXParserFactory factory = SAXParserFactory.newInstance();
• 通過SAX解析工廠得到解析器對象
SAXParser sp = factory.newSAXParser();
• 通過解析器對象得到一個XML的讀取器
XMLReader xmlReader = sp.getXMLReader();
• 設定讀取器的事件處理器
xmlReader.setContentHandler(new BookParserHandler());
• 解析xml檔案
xmlReader.parse(“book.xml”);
4.練習:查找id為007的學生姓名
第六部分:XML Pull解析
為什麼會出現PULL解析?
Pull解析與sax解析類似都是基于事件方法回調機制來實作對xml檔案解析。
Sax解析不足:即使已經找到所要的資料,xml資料還是會全部加載進來并産生方法調用。程式員無法停止這些無用的操作,而pull解析解決了此問題。
Pull解析:加載每一部分資料産生方法調用,都必須通過程式員調用一個固定的方法才能進行下去,否則解析工作就停止了。Next()
注意:pull解析也隻能用于讀取xml檔案,無法作更新
Pull解析依賴兩個jar包:xmlpull_1_0_5.jar和kxml2-2.3.0.jar
3.常用接口或類
XmlPullParserFactory
XmlPullParser(既是解析器又是資料的存儲器)
XmlPullParserException
4.練習:查找id為007的學員姓名