android如何使用DOM和SAXParserFactory来解析XML文件
时间:2022-02-24 10:28
对于以下的xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <books> <book email="zhoujunhui"> <name>rjzjh</name> <price>jjjjjj</price> </book> <book email="aaaaaaaaa"> <name>bbbb</name> <price>ccc</price> </book> </books>
这样来解析:
import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); XmlReader(); for(int i=0;i<list.size();i++) { Book book = list.get(i); Log.d("TAG", "name="+book.name+"email="+book.email); } } public void XmlReader() { Document doc = null; AssetManager assetManager = this.getAssets(); DocumentBuilder docBuilder = null; DocumentBuilderFactory docBuilderFactory = null; try { docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilder = docBuilderFactory.newDocumentBuilder(); doc = docBuilder.parse(assetManager.open("test1.xml")); Element root = doc.getDocumentElement(); NodeList books = root.getChildNodes(); if (books != null) { for (int i = 0; i < books.getLength(); i++) { Node book = books.item(i); Book mybook = null; if (book.getNodeType() == Node.ELEMENT_NODE) { //这里才表示这个是<book>节点 mybook = new Book(); String email = book.getAttributes() .getNamedItem("email").getNodeValue(); mybook.email = email; for (Node node = book.getFirstChild(); node != null; node = node .getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { if (node.getNodeName().equals("name")) { String name1 = node.getFirstChild() .getNodeValue(); mybook.name = name1; } if (node.getNodeName().equals("price")) { String price = node.getFirstChild() .getNodeValue(); mybook.price = price; } } } list.add(mybook); } } } } catch (Exception e) { e.printStackTrace(); } } private ArrayList<Book> list = new ArrayList<Book>(); private class Book{ String email; String name; String price; }
采用SAXParserFactory:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); InputStream is = this.getAssets().open("test1.xml", Context.MODE_PRIVATE); saxParser.parse(is, new MyDefaultHandler()); } catch (Exception ex) { } System.out.println("===size=" + list.size()); for (int i = 0; i < list.size(); i++) { Book book = list.get(i); Log.d("TAG", "name=" + book.name + "email=" + book.email); } } protected String getElementName(String name, String qName) { if ("".equals(name)) { return qName; } else { return name; } } class MyDefaultHandler extends DefaultHandler { private StringBuffer buf; private Book mBook; public MyDefaultHandler() { super(); mBook = new Book(); } protected StringBuffer getBuffer() { return this.buf; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); buf = new StringBuffer(); for (int i = 0; i < attributes.getLength(); i++) { String value = attributes.getValue(i); mBook.email = value; } } @Override public void characters(char[] chars, int start, int length) throws SAXException { super.characters(chars, start, length); getBuffer().append(chars, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); String elementName = getElementName(localName, qName); if (elementName.equals("book")) { list.add(mBook); mBook = new Book(); } else if (elementName.equals("name")) { mBook.name = getBuffer().toString(); } else if (elementName.equals("price")) { mBook.price = getBuffer().toString(); } } } private ArrayList<Book> list = new ArrayList<Book>(); private class Book { String email; String name; String price; @Override public String toString() { return "name=" + name + "price=" + price; } }
以上就是android如何使用DOM和SAXParserFactory来解析XML文件的内容,更多相关内容请关注PHP中文网(www.gxlsystem.com)!