项目的结构
首先新建一个book_info.xml的xml文件,结构如下:
<?xml version="1.0" encoding="UTF-8"?> <books> <catalog>Computer</catalog> <book> <country>USA</country> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <price>10.90</price> </book> <book> <country>UK</country> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <price>9.90</price> </book> <book> <country>USA</country> <title>Greatest Hits</title> <artist>Dolly Parton</artist> <price>9.90</price> </book> </books>
BookItem.java 代表一本书的信息,代码如下:
package com.example.utility; public class BookItem { public String name; public String title; public String artit; public String price; public BookItem() { } public String getName() { return name; } public void setName(String countryName) { this.name = countryName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getArtist() { return artit; } public void setArtist(String artit) { this.artit = artit; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } }
BookFeed代表所有书的信息,代码如下:
package com.example.utility; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; public class BookFeed { private String catalog; private List<BookItem> bookList; private int itemcount; public BookFeed() { bookList = new Vector<BookItem>(0); } public int addBookItem(BookItem item) { itemcount++; bookList.add(item); return itemcount; } public BookItem getBookItem(int location) { return bookList.get(location); } public List<BookItem> getAllBooks() { return bookList; } public String getCatalog() { return catalog; } public void setCatalog(String catalog) { this.catalog = catalog; } public List<BookItem> getBookList() { return bookList; } public void setBookList(List<BookItem> bookList) { this.bookList = bookList; } public List GetAllBooks() { List<Map<String, String>> data = new ArrayList<Map<String,String>>() ; int size = bookList.size(); for (int i = 0; i < size; i++) { HashMap<String, String> bookItemHashMap = new HashMap<String, String>(); bookItemHashMap.put("title", bookList.get(i).getTitle()); bookItemHashMap.put("price", bookList.get(i).getPrice()); data.add(bookItemHashMap); } return data; } }
BookHand.java
package com.example.utility; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.R.integer; public class BookHandle extends DefaultHandler { BookFeed bookFeed; BookItem bookItem; final int Book_Country = 1; final int Book_Title = 2; final int Book_Artist = 3; final int Book_Price = 4; int curState = 0; public BookHandle() { } public BookFeed getBookFeed() { return bookFeed; } @Override public void startDocument() throws SAXException { bookFeed = new BookFeed(); bookItem = new BookItem(); } @Override public void endDocument() throws SAXException { } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (localName.equals("books")) { curState = 0; return; } if (localName.equals("book")) { bookItem = new BookItem(); return; } if (localName.equals("country")) { curState = Book_Country; return; } if (localName.equals("title")) { curState = Book_Title; return; } if (localName.equals("artist")) { curState = Book_Artist; return; } if (localName.equals("price")) { curState = Book_Price; return; } curState = 0; } @Override public void endElement(String uri, String localName,String qName) throws SAXException { if (localName.equals("book")) { bookFeed.addBookItem(bookItem); return; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { String str = new String(ch,start,length); switch (curState) { case Book_Country: bookItem.setName(str); curState = 0; break; case Book_Title: bookItem.setTitle(str); curState = 0; break; case Book_Artist: bookItem.setArtist(str); curState = 0; break; case Book_Price: bookItem.setPrice(str); curState = 0; break; default: return; } } }
MainActiviyt.java
public class MainActivity extends Activity { public BookFeed feed; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); feed = getFeed(); showList(); } private void showList() { // TODO Auto-generated method stub ListView lView = (ListView)this.findViewById(R.id.listView1); if (feed == null) { Log.i("Custom Message", "feed is null"); return; } SimpleAdapter adapter = new SimpleAdapter( this, feed.GetAllBooks(), android.R.layout.simple_list_item_2, new String[]{"title","price"}, new int[]{android.R.id.text1, android.R.id.text2}); lView.setAdapter(adapter); } public BookFeed getFeed() { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); BookHandle handle = new BookHandle(); reader.setContentHandler(handle); InputSource iSource = new InputSource(this.getClassLoader().getResourceAsStream("book_info.xml")); reader.parse(iSource); return handle.getBookFeed(); } catch (ParserConfigurationException e) { // TODO: handle exception e.printStackTrace(); } catch (SAXException e) { // TODO: handle exception e.printStackTrace(); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } return null; } }
效果图: