• 解析XML文件之使用DOM解析器


    在前面的文章中。介绍了使用SAX解析器对XML文件进行解析。SAX解析器的长处就是占用内存小。这篇文章主要介绍使用DOM解析器对XML文件进行解析。

    DOM解析器的长处可能是理解起来比較的直观,当然,每一个人对不同的解析方法可能有不同的喜好。可是DOM解析器有个比較大的缺点,就是占用内存比較多。在Android中的XML解析中,还是更推荐其它的解析方式。

    以下介绍使用DOM解析器对XML进行解析。

    以下是我们须要解析的xml文件

    <?xml version="1.0" encoding="UTF-8"?

    > <persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>lixiangmei</name> <age>25</age> </person> </persons>


    我们的person实体类


    public class Person {
    	private Integer id;
    	private String name;
    	private Short age;
    	
    	public Person(){}
    	
    	public Person(Integer id, String name, Short age) {
    		this.id = id;
    		this.name = name;
    		this.age = age;
    	}
    	
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Short getAge() {
    		return age;
    	}
    	public void setAge(Short age) {
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
    	}
    	
    }

    我们的解析代码。由于凝视比較多,所以只是多解释。

    /**
     * 採用DOM对XML进行解析
     * 
     * @author ZhaoKaiQiang
     * 
     * @time 2014年6月3日
     */
    public class DOMResovel {
    
    	public static List<Person> getPersons(InputStream inputStream) throws Exception {
    
    		List<Person> persons = new ArrayList<Person>();
    		// 获取DOM解析器
    		DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    		// 获取解析好的文档树
    		Document document = documentBuilder.parse(inputStream);
    		// 获取根元素节点
    		Element root = document.getDocumentElement();
    		// 获取根元素以下的所以person节点
    		NodeList personList = root.getElementsByTagName("person");
    		//遍历全部的person节点
    		for (int i = 0; i < personList.getLength(); i++) {
    			Person person = new Person();
    			// 获取每个person节点
    			Element personElement = (Element) personList.item(i);
    			//设置person对象属性
    			person.setId(new Integer(personElement.getAttribute("id")));
    			// 获取person以下的子节点
    			NodeList childList = personElement.getChildNodes();
    			// 遍历子节点
    			for (int j = 0; j < childList.getLength(); j++) {
    				//推断是否是元素节点
    				if (childList.item(j).getNodeType() == Node.ELEMENT_NODE) {
    					Element chilElement = (Element) childList.item(j);
    					if ("name".equals(chilElement.getNodeName())) {
    						person.setName(chilElement.getFirstChild().getNodeValue());
    					} else if ("age".equals(chilElement.getNodeName())) {
    						person.setAge(new Short(chilElement.getFirstChild().getNodeValue()));
    					}
    				}
    			}
    			persons.add(person);
    		}
    
    		return persons;
    	}
    
    }

    以下是我们的单元測试方法,对解析器进行单元測试

    public void testDom() throws Exception {
    		InputStream inStream = getClass().getClassLoader().getResourceAsStream("persons.xml");
    		List<Person> persons = DOMResovel.getPersons(inStream);
    
    		for (Person person : persons) {
    			Log.i(TAG, person.toString());
    		}
    
    	}

    以下是解析结果



    有疑问能够留言





  • 相关阅读:
    ESA2GJK1DH1K开发教程: 来看看最新整理的整个开发板的教程大纲吧
    关于STM32 Flash的一些问题
    关于单片机的RAM
    单片机模块化程序: 单片机加入JSON是个不错的选择
    YY天气使用
    单片机模块化程序: 给单片机写个回调函数怎么样
    单片机模块化程序: 单片机AT指令配置模块程序模板(非阻塞版)
    单片机模块化程序: 单片机AT指令配置模块程序模板(阻塞版)
    【java基础】java集合之TreeMap
    【java基础】java集合之HashTable,HashSet,HashMap
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7017575.html
Copyright © 2020-2023  润新知