歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android基礎教程:學習SAX解析

Android基礎教程:學習SAX解析

日期:2017/3/1 10:48:01   编辑:Linux編程

上次學習的是DOM解析見 天氣預報Dom解析 見 http://www.linuxidc.com/Linux/2011-12/49439.htm

這次我們來了解一下SAX是什麼情況! 相對於DOM來說SAX在平時要用的多一下。

在上次DOM學習中,我們也看見了,解析DOM,循環用的很多。

那個XML簡單,DOM樹層次不深,說通俗點就像for循環一樣嵌套的不多。如果很深的話用SAX就要方便的多了.... 在寫上次程序的時候,我是邊看xml 邊寫代碼,需要看仔細些,我眼睛都看花了(可能是我變量名沒定義好),另外定義那個變量時也不好弄 遍歷時需要中間變量稍多些, 而且都是差不多意思差不多的變量...... 我們直接來看一下實例:

books.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <books count="3"
  3. xmlns="http://test.org/books">
  4. <!--books's comment-->
  5. <book>
  6. <id>1</id>
  7. <name>Thinking in JAVA</name>
  8. </book>
  9. <book>
  10. <id>2</id>
  11. <name>Core JAVA2</name>
  12. </book>
  13. <book>
  14. <id>3</id>
  15. <name>C++ primer</name>
  16. </book>
  17. <book>
  18. <id>4</id>
  19. <name>數據結構(嚴蔚敏)</name>
  20. </book>
  21. </books>
關於接下來要上的實例 我簡單說一下,這次需要解析的是上面xml文件。

我們需要把xml文件中所有書的信息摘取下來,最後統一輸出。

類 book.java 用於保存一本書的信息 這裡為了簡單,xml文件就只是簡單寫了個ID,name 當然還有價錢等其他信息....

  1. public class Book
  2. {
  3. private int id;
  4. private String name;
  5. public int getId()
  6. {
  7. return id;
  8. }
  9. public void setId(int id)
  10. {
  11. this.id = id;
  12. }
  13. public String getName()
  14. {
  15. return name;
  16. }
  17. public void setName(String name)
  18. {
  19. this.name = name;
  20. }
  21. }
類XmlHandler.java 負責處理,管理xml保存書籍信息..
  1. import java.util.ArrayList;
  2. import org.xml.sax.Attributes;
  3. import org.xml.sax.SAXException;
  4. import org.xml.sax.helpers.DefaultHandler;
  5. public class XmlHandler extends DefaultHandler
  6. {
  7. public ArrayList<Book> books ;
  8. private ArrayList<String> strList;
  9. private Book book;
  10. private StringBuilder sb = new StringBuilder();
  11. @Override
  12. public void startDocument() throws SAXException
  13. {
  14. books = new ArrayList<Book>();
  15. strList = new ArrayList<String>();
  16. super.startDocument();
  17. }
  18. @Override
  19. public void endDocument() throws SAXException
  20. {
  21. super.endDocument();
  22. }
  23. @Override
  24. public void startElement(String uri, String localName, String qName,
  25. Attributes attributes) throws SAXException
  26. {
  27. if(qName.equals("book"))
  28. {
  29. book = new Book();
  30. }
  31. super.startElement(uri, localName, qName, attributes);
  32. }
  33. @Override
  34. public void endElement(String uri, String localName, String qName)
  35. throws SAXException
  36. {
  37. strList.add(qName);
  38. if(qName.equals("book"))
  39. {
  40. books.add(book);
  41. }
  42. else if(qName.equals("id"))
  43. {
  44. book.setId(Integer.parseInt(sb.toString().trim()) );
  45. }
  46. else if(qName.equals("name"))
  47. {
  48. book.setName(sb.toString());
  49. }
  50. super.endElement(uri, localName, qName);
  51. }
  52. @Override
  53. public void characters(char[] ch, int start, int length)
  54. throws SAXException
  55. {
  56. sb.setLength(0);
  57. String str = new String(ch,start,length);
  58. sb.append(str);
  59. super.characters(ch, start, length);
  60. }
  61. }
上面幾個函數都是覆蓋類DefaultHandler的函數 被覆蓋的函數默認情況下,不執行任何操作。
Copyright © Linux教程網 All Rights Reserved