Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android使用SAX解析xml

Android使用SAX解析xml

編輯:關於Android編程

一、理論准備       SAX采用事件驅動機制來解析XML文檔,每當SAX解析器發現文檔開始、元素開始、文本、元素結束、文檔結束等事件時,就會向外發送一次事件,而開發者則可以通過編寫事件監聽器處理這些事件,以此來獲取XML文檔裡的信息。       DOM標准簡單易用,但是它需要一次性地讀取整個XML文檔,而且在程序運行期間,整個DOM樹常駐內存,導致系統開銷過大。SAX解析方式占用內存小,處理速度更快。      由於DOM一次性將整個XML文檔全部讀入內存,因此可以隨機訪問XML文檔的每個元素。SAX采用順序模式來依次讀取XML文檔,因此無法做到隨機訪問XML文檔的任意元素。   二、項目結構                 image框住的是本實例需要的代碼。   三、實例實現     <?xml version="1.0" encoding="UTF-8"?> <persons>     <person id="1">         <name>Jack</name>         <age>24</age>     </person>     <person id="2">         <name>Tom</name>         <age>25</age>     </person>     <person id="3">         <name>Bob</name>         <age>22</age>     </person></persons>     ps:不知道為啥,用xml格式發布就出問題,用java就不出問題~~憤怒          不知道咋回事Test類就是插不進去,顯示一半,氣死了。。直接看吧 package xml;   import java.io.IOException;  import java.io.InputStream;  import java.net.HttpURLConnection;  import java.net.MalformedURLException;  import java.net.URL;  import java.util.List;   public class Test {      static String URL_PATH = "http://localhost:8080/TestGet/person.xml";           public static InputStream getInputStream() throws IOException {          InputStream inputStream = null;          HttpURLConnection httpURLConnection = null;          try {              URL url = new URL(URL_PATH);              if (url != null) {                  httpURLConnection = (HttpURLConnection) url.openConnection();                  // 設置連接網絡的超時時間                  httpURLConnection.setConnectTimeout(3000);                  httpURLConnection.setDoInput(true);                  // 設置本次http請求使用get方式請求                  httpURLConnection.setRequestMethod("GET");                  int responseCode = httpURLConnection.getResponseCode();                  if (responseCode == 200) {                      // 從服務器獲得一個輸入流                      inputStream = httpURLConnection.getInputStream();                  }              }          } catch (MalformedURLException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }             return inputStream;      }      public static void main(String[] args) throws IOException, Exception {          // TODO Auto-generated method stub          if(getInputStream()==null) {              System.out.println("讀取失敗");              return ;          }          List<Person> person = SaxService.readXML(getInputStream());          System.out.println(person.size());          for(int i=0; i<person.size(); i++)              System.out.println("id:"+person.get(i).getId()+"age:"+person.get(i).getAge()                      +"name:"+person.get(i).getName());      }   }       結果如下:     + View Code 四、遺留問題       1.sax解析中Name和localName什麼區別,想到這個是因為一哥們用的localName和person判斷他表示結果對了,費解???       2.endElement的if裡把person設置為null是為了防止重復觸發該事件,之後把currentTag設置為null是何意?莫非存在如下情況,費解啊。。。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved