Android DOM解析XML

沿用上一章Android SAX解析XML里面的XMl和Product.java类,这里我们使用DOM去解析XML文件。

package com.dom.xml;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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 com.sax.xml.Product;

public class DOMParserXML {
	public static List<Product> parseXml(InputStream is){
		List<Product> products = new ArrayList<Product>();
		Product product = null;
		try {
			//得到Dom解析对象工厂
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			//通过工程创建Dom解析对象实例
			DocumentBuilder builder = factory.newDocumentBuilder();
			//将xml文件的输入流交给Dom解析对象进行解析,并将Dom树返回
			Document document = builder.parse(is);
			//通过Dom树接收到根元素
			Element rootElement = document.getDocumentElement();
			//通过根元素获得下属的所有名字为product节点
			NodeList nodeList = rootElement.getElementsByTagName("product");
			int count = nodeList.getLength();
			//遍历取出的product节点集合
			for (int i = 0; i < count; i++) {
				//得到一个product节点
				Element productElement = (Element)nodeList.item(i);
				//新建一个Product对象
				product = new Product();
				//得到product标签的下属所有节点
				NodeList productChildList = productElement.getChildNodes();
				int size = productChildList.getLength();
				//循环得到的下属标签
				for (int j = 0; j < size; j++) {
					//创建一个引用,指向循环的标签
					Node node = productChildList.item(j);
					//如果此循环出来的元素时Element对象,即标签元素
					if (Node.ELEMENT_NODE == node.getNodeType()) {
						//如果这个标签的名字是id,那么得到它的值,赋值给Product对象
						if ("id".equals(node.getNodeName())) {
							int id = Integer.parseInt(node.getFirstChild().getNodeValue());
							product.setId(id);
						}
						if ("name".equals(node.getNodeName())) {
							String name = node.getFirstChild().getNodeValue();
							product.setName(name);
						}
						if ("price".equals(node.getNodeName())) {
							float price = Float.parseFloat(node.getFirstChild().getNodeValue());
							product.setPrice(price);
						}
					}
				}
				//将此product对象添加到products中
				products.add(product);
				//将product制空
				product = null;
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		//返回xml解析后得到的对象集合
		return products;
	}
}


解析后的结果如下:



你可能感兴趣的:(android,dom)