SAX解析XML:
SAX基本原理:
采用事件驅動解析XML文件,以流式方式逐行的去讀,它不需要解析完整個文檔,在按內容順序解析文檔的過各中,SAX會判斷當前講到的字符是否合法XML語法中的某部分,如果符合就觸發事件(例如startDocument()、endDocument()諸如此類的事件),它的特點是不會記錄前面所碰到的標簽,並且它是一個解析速度快並且占用內存少的XML解析器,
SAX解析步驟:
1、從SAXPraserFactory中創建一個新的實例
2、再從SAXParserFactory裡得到一個新的SAX解析器對象SAXParser
3、再調用SAXParser對象的.parse()方法裡面帶兩個參數一個是輸入流一個是DefaultHandler對象這樣就可以了。而DefaultHandler是實現了ContentHandler接口的。ContentHandler接口中定義了一系列的方法事件:諸如:
方法作用:文檔解析觸發此事件
方法作用:文檔解析結束時觸發此事件
方法作用:當開始讀取元素時觸發此事件
參數說明:
uri:命名空間
localName:不帶命名空間的前綴的標簽名
qName:不定期命名空間前綴的標簽名
atts:得到所有的屬性各和相應的值
方法作用:讀取的標簽結束時觸發此事件,參數說明同上
方法作用:用來處理在XML文件中讀到的內容
參數說明:
ch:用於存放文件的內容
start:所讀到的字符串在這個數組中的起始位置
length:長度
我們可以用new String(ch,start,length)來獲取內容
下面以person.xml文件為例采用SAX解析器來模擬解析這個XML文檔:
解析person.xml觸發的事件為:
讀到的標簽及內容
觸發事件
{文檔開始}
startDocument()
<persons>
startElement(, "persons", null, "{Attributes}")
"\n\t"
characters("<persons>...</persons>", "12", "2")
<person>
startElement(, "person", null, "{Attributes}")
"\n\t\t"
characters("<persons>...</persons>", "31", "3")
<name>
startElement(, "name", null, "{Attributes}")
"李明"
characters("<persons>...</persons>", "40", "2")
</name>
endElement("", "name", null)
"\n\t\t"
characters("<persons>...</persons>", "50", "3")
<age>
startElement(, "age", null, "{Attributes}")
"30"
characters("<persons>...</persons>", "58", "2")
</age>
endElement("", "age", null)
"\n\t"
characters("<persons>...</persons>", "67", "2")
</person>
endElement("", "person", null)
"\n\t"
characters("<persons>...</persons>", "79", "2")
又重復<person>
….
{文檔結束}
endDocument()