Android解析XML文件有三种方式,分别是DOM、Pull和SAX。
DOM方式
DOM(Document Object Model)即文档对象模型,是一种以树形结构来表示XML文档的编程接口,它可以让程序员以编程的方式,从XML文档中获取指定的信息,也可以对XML文档进行修改。Android中使用DOM解析XML文件,可以使用DocumentBuilderFactory类,它的作用是创建一个DocumentBuilder实例,使用DocumentBuilder实例的parse()方法来解析XML文件,从而获取一个Document实例,Document实例代表了整个XML文档的树形结构,可以使用Document实例的getElementsByTagName()方法来获取指定标签的节点,通过Node实例的getNodeValue()方法来获取XML文件中的信息。
// 创建DocumentBuilderFactory实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 创建DocumentBuilder实例
DocumentBuilder db = dbf.newDocumentBuilder();
// 解析XML文件
Document doc = db.parse(inputStream);
// 获取指定标签的节点
NodeList nodeList = doc.getElementsByTagName("book");
// 获取XML文件中的信息
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
NodeList childNodes = node.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node childNode = childNodes.item(j);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
String nodeName = childNode.getNodeName();
String nodeValue = childNode.getNodeValue();
// do something
}
}
}
Pull方式
Pull方式是一种基于事件的解析方式,它可以让程序员自定义解析XML文件的方式,可以根据需要获取XML文件中的信息。Android中使用Pull方式解析XML文件,可以使用XmlPullParser类,它可以解析XML文件,并且提供了一系列的方法来获取XML文件中的信息,如getName()方法用于获取标签的名称,getText()方法用于获取标签的文本内容,getEventType()方法用于获取事件类型。
// 创建XmlPullParser实例
XmlPullParser parser = Xml.newPullParser();
// 设置要解析的XML文件
parser.setInput(inputStream, "utf-8");
// 获取事件类型
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// do something
break;
case XmlPullParser.START_TAG:
// 获取标签的名称
String tagName = parser.getName();
// 获取标签的文本内容
String text = parser.getText();
// do something
break;
case XmlPullParser.END_TAG:
// do something
break;
}
// 获取下一个事件类型
eventType = parser.next();
}
SAX方式
SAX(Simple API for XML)即简单的XML API,它是一种基于事件的解析方式,可以让程序员自定义解析XML文件的方式,可以根据需要获取XML文件中的信息。Android中使用SAX方式解析XML文件,可以使用SAXParser类,它可以解析XML文件,并且提供了一系列的回调方法来获取XML文件中的信息,如startDocument()方法在XML文件开始解析时被调用,startElement()方法在XML文件中开始标签被解析时被调用,characters()方法在XML文件中的文本被解析时被调用,endElement()方法在XML文件中结束标签被解析时被调用,endDocument()方法在XML文件结束解析时被调用。
// 创建SAXParser实例
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
// 解析XML文件
parser.parse(inputStream, new DefaultHandler() {
@Override
public void startDocument() throws SAXException {
// do something
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// do something
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// do something
}
@Override
public void end