xml解析

Xml解析

一.DOM方式解析

1.將xml文檔解析爲一個樹形結構的Document,以後的操作全都操作這個Document,一個節點就是一個對象,存取對象就是存取xml中的內容,將是實際內容的幾倍。

優點:可以遍歷文檔樹,知上下層節點的情況。

2.解析步驟

(1)獲取DBF實例(DocumentBuilderFactory.newInstance())

(2)獲取DB實例(dbf.newDocumentBuilder())

(3)DB的對象解析xml(db.parser())

調用parse解析---再用normalize()去掉格式化的空白

 

 

 

 

二.Pull解析

Pull解析

XMLPullParser xp = Xml.newPullParser();

xp.setInput(is,”utf-8”);

Int event = xp.getEventType();//觸發一個解析,根據返回的值判斷當前解析狀態

Whileevent!=XMLPullParser.END_DOCUMENT{

Switch(event){

Case XMLPullParser.START_DOCUMENT//開始解析

Case XMLPullParser.START_TAG//開始元素

Case XMLPullParser.END_TAGCase XMLPullParser.END_DOCUMENT//結束元素

Case XMLPullParser.TEXT//解析文本

Case XMLPullParser.END_DOCUMENT://結束解析

break;

}

Xp.next();//觸發下一個事件,即下一個元素

}

 

 

另一種方法

步驟:

(1)獲取XPPF--XmlPullParserFactory.newInstance()

(2)獲取XPP--xppf.newPullParser()

(3)解析setInput(isr)

(4)XmlUtils解析文檔--開始解析和獲取下一個元素

 

使用Pull生成xml文檔

XMLSerializer serializer = Xml.newSerializer();

serializer.setOutput(outputStream,”utf-8”);

serializer.startTag(null,”persons”);//開始元素,根節點

for(Person person:persons){

    serializer.startTag(null,”person”);

serializer.attribute(null,”id”,person.getId().toString());//爲元素添加屬性

serializer.startTag(null,”name”);

serializer.text(person.getText());//添加文本

serializer.endTag(“name”);

 

serializer.startTag(null,”age”);

serializer.text(person.getAge());//添加文本

serializer.endTag(“age”);

 

serializer.endTag(“pseron”);

}

serializer.endTag(null,”persons”);

serializer.endDocument();

outputStream.flush();

outputStream.close();

注:

1.serializer.setOutput(outputStream,”utf-8”);設置輸出方向,可以是輸出流和寫入器,寫入器比輸出流更加靈活,可以向更多的媒介進行輸出,如硬盤,網絡,內存等。

2.設置xml的標籤即文檔元素,通過startTag()開始一個標籤,必須與之對應一個endTag()方法

3.對標籤添加屬性,文本的方法,attribute(),text();

 

 

三.SAX解析              

ContentHandler

XMLReader 

 XMLParser 

InputSource  

DefaultHandler

 

文檔解析接口

註冊處理器並啓動解析器

XMLReader,JAXP對其的封裝

控制解析器如何讀取文檔

 

解析接口的實現,通過繼承他實現解析xml

 

 

 

 

 

 

 

步驟:

1.使用SAXParser解析代碼

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

sp.parse(is,handler);//handler是繼承自DefaultHandler類的對象,實現處理文檔

2.使用XMLReader

XMLReader reader = new XMLReader();

reader.setContentHandler(handler);

reader.parser(is);

 

 

 

 

 

注:需繼承自BaseHandler,在其中處理xml的內容

比較

SAX

PULL

DOM

內存佔用少,速度快,對於反覆檢索xml來說,SAX比較臃腫

 

 

Pull可以生成xmlDOM可以對xml進行修改

 

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