歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android平台下的XML文件解析之SAX模式解析

Android平台下的XML文件解析之SAX模式解析

日期:2017/3/1 11:06:46   编辑:Linux編程

SAX解析XML:

SAX基本原理:

采用事件驅動解析XML文件,以流式方式逐行的去讀,它不需要解析完整個文檔,在按內容順序解析文檔的過各中,SAX會判斷當前講到的字符是否合法XML語法中的某部分,如果符合就觸發事件(例如startDocument()、endDocument()諸如此類的事件),它的特點是不會記錄前面所碰到的標簽,並且它是一個解析速度快並且占用內存少的XML解析器,

SAX解析步驟:

1、從SAXPraserFactory中創建一個新的實例

2、再從SAXParserFactory裡得到一個新的SAX解析器對象SAXParser

3、再調用SAXParser對象的.parse()方法裡面帶兩個參數一個是輸入流一個是DefaultHandler對象這樣就可以了。而DefaultHandler是實現了ContentHandler接口的。ContentHandler接口中定義了一系列的方法事件:諸如:

  1. public abstract void startDocument ()

方法作用:文檔解析觸發此事件

  1. public abstract void endDocument ()

方法作用:文檔解析結束時觸發此事件

  1. public abstract void startElement (String uri, String localName, String qName, Attributes atts)

方法作用:當開始讀取元素時觸發此事件

參數說明:

uri:命名空間

localName:不帶命名空間的前綴的標簽名

qName:不定期命名空間前綴的標簽名

atts:得到所有的屬性各和相應的值

  1. public abstract void endElement (String uri, String localName, String qName)

方法作用:讀取的標簽結束時觸發此事件,參數說明同上

  1. public abstract void characters (char[] ch, int start, int length)

方法作用:用來處理在XML文件中讀到的內容

參數說明:

ch:用於存放文件的內容

start:所讀到的字符串在這個數組中的起始位置

length:長度

我們可以用new String(ch,start,length)來獲取內容

下面以person.xml文件為例采用SAX解析器來模擬解析這個XML文檔:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persons>
  3. <person id="23">
  4. <name>李明</name>
  5. <age>30</age>
  6. </person>
  7. <person id="20">
  8. <name>李向梅</name>
  9. <age>25</age>
  10. </person>
  11. </persons>

解析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()

Copyright © Linux教程網 All Rights Reserved