Android 中使用dom的方式解析XML

本文介绍如何使用Java解析XML文档,通过具体实例演示了从字符串创建DOM文档对象、获取XML节点信息并转换为Java对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 定义XMLDocument

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="23">
		<name>李明</name>
		<age>30</age>
	</person>
	<person id="20">
		<name>李向梅</name>
		<age>25</age>
	</person>
</persons>


用java变量声明上述文档为:

private String xmlText ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><persons><person id=\"23\"><name>李明</name><age>30</age></person><person id=\"20\"><name>李向梅</name><age>25</age></person></persons>";


List<Person> persons = new ArrayList<Person>(); 
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try
        {
        	InputStream is = new ByteArrayInputStream(xmlText.getBytes("UTF-8"));
        	DocumentBuilder builder = factory.newDocumentBuilder(); 
        	Document dom = builder.parse(is);
        	Element root = dom.getDocumentElement(); 
        	NodeList items = root.getElementsByTagName("person");//查找所有person节点
        	for (int i = 0; i < items.getLength(); i++) {
        		Person person = new Person(); 
        		Element personNode = (Element) items.item(i);
        		person.setId(new Integer(personNode.getAttribute("id")));
        		NodeList childsNodes = personNode.getChildNodes();
        		for (int j = 0; j < childsNodes.getLength(); j++) {
        			Node node = (Node) childsNodes.item(j); //判断是否为元素类型
        			if(node.getNodeType() == Node.ELEMENT_NODE){
        				Element childNode = (Element) node;
        				if ("name".equals(childNode.getNodeName())) {
        					person.setName(childNode.getFirstChild().getNodeValue()); 
        				}
        				else if("age".equals(childNode.getNodeName()))
        				{
        					person.setAge(new Short(childNode.getFirstChild().getNodeValue()));
        				}
        			}
        		}
        		persons.add(person); 
        	}
        }
        catch (Exception e) { 
        	e.printStackTrace(); 
    	}
        // 解析完毕,下面为测试代码
        String names = "";
        for(int i=0;i<persons.size();i++)
        	names+=persons.get(i).getName();
        
		new AlertDialog.Builder(this).setTitle("Hint").setMessage(names).setPositiveButton("OK", null).show();


Person类:

class Person { 
	private Integer id; 
	private String name; 
	private Short 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;
	} 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值