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