概述
对于以下的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文件的内容,更多相关内容请关注靠谱客(www.uoften.com)!
最后
以上就是无奈飞机为你收集整理的android如何使用DOM和SAXParserFactory来解析XML文件的全部内容,希望文章能够帮你解决android如何使用DOM和SAXParserFactory来解析XML文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复