1. DOM 解析:
DOM(Document Object Model)解析将整个 XML 文档加载到内存中,形成一个树形结构,开发者可以通过遍历树来获取和操作 XML 数据。这种方式适用于 XML 文件较小且结构相对简单的情况。
示例代码:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomParser {
public static void parse(String xmlData) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new StringReader(xmlData)));
// 可以通过标签名获取元素列表
NodeList nodeList = doc.getElementsByTagName("item");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
// 通过标签名获取元素的文本内容
String title = element.getElementsByTagName("title").item(0).getTextContent();
String description = element.getElementsByTagName("description").item(0).getTextContent();
// 在这里处理获取到的数据
// ...
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. SAX 解析:
SAX(Simple API for XML)解析是一种基于事件的解析方式,逐行读取 XML 数据并触发事件,开发者可以在事件处理器中编写逻辑来处理感兴趣的 XML 元素。相比于 DOM 解析,SAX 解析更加适用于处理大型 XML 数据,因为它不需要一次性将整个文档加载到内存中。
示例代码:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxParser {
public static void parse(String xmlData) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean inItem = false;
String title = "";
String description = "";
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("item")) {
inItem = true;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("item")) {
// 在这里处理获取到的数据
// title 和 description 分别为解析到的标题和描述
// ...
inItem = false;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (inItem) {
String data = new String(ch, start, length).trim();
if (!data.isEmpty()) {
if (title.isEmpty()) {
title = data;
} else {
description = data;
}
}
}
}
};
saxParser.parse(new InputSource(new StringReader(xmlData)), handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用示例:
String xmlData = "Your XML data here";
// 使用 DOM 解析
DomParser.parse(xmlData);
// 使用 SAX 解析
SaxParser.parse(xmlData);
在实际应用中,选择使用 DOM 还是 SAX 取决于 XML 数据的大小和复杂度。 DOM 适用于较小、结构较为简单的 XML 数据,而 SAX 更适用于大型、复杂的 XML 数据。另外,也可以考虑使用第三方库,如 SimpleXML、XmlPullParser 等,以简化 XML 解析的过程。
转载请注明出处:http://www.zyzy.cn/article/detail/15194/Android