`
J-mate
  • 浏览: 8185 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Dom解析XML文件

阅读更多

DOM解析xml文件的原理是把xml文件的文档树对象全部加载到内存中,然后解析,这种解析方式的缺点在于在手机、pad等CPU运算速度不快,内存有限的设备上会影响软件效率和系统性能。

使用DOM技术解析XML文件案例:

 

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="1">
		<name>maomao</name>
		<age>26</age>
	</person>
	<person id="2">
		<name>hy</name>
		<age>27</age>
	</person>
</persons>
    

解析代码:

 

	public static List<Person> domParse(InputStream inStream) throws Exception {
		List<Person> persons = new ArrayList<Person>();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(inStream);
		// 获得根节点
		Element root = document.getDocumentElement();
		NodeList personElements = root.getElementsByTagName("person");
		for(int i=0; i<personElements.getLength(); i++) {
			Person person = new Person();
			Element personElement = (Element) personElements.item(i);
			person.setId(Integer.parseInt(personElement.getAttribute("id")));
			// 获得person元素节点下所有的节点,其中包含文本节点和元素节点
			NodeList personChilds = personElement.getChildNodes();
			for(int j=0; j<personChilds.getLength(); j++) {
				// 判断节点是否为元素节点
				if(personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
					Element element = (Element)personChilds.item(j);
					if(element.getNodeName().equals("name")) {
						// 取得元素节点第一个节点的值
						person.setName(element.getFirstChild().getNodeValue());
					} else if(element.getNodeName().equals("age")) {
						person.setAge(new Short(element.getFirstChild().getNodeValue()));
					}
				}
			}
			persons.add(person);
		}
		return  persons;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics