DOM解析

网络传输数据最常用的格式有两种:XML和JSON。XML的优势在于无视平台,在任何平台都能使用,且使用范围广,而JSON的优势在于解析简单,看起来一目了然。

今天主要讲的是XML解析的方法:XML常用的解析方法有三种DOM解析,SAX解析以及PULL解析。前面两种属于java的解析方式,而后者只能在Android使用。

下面介绍一下DOM解析的基本方式:

package com.example.internetdemo;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.content.Context;
import android.content.res.Resources;

public class DomParserDemo {

	/**
	 * 
	 * @param context
	 * @throws ParserConfigurationException
	 *             -->解析设置异常
	 * @throws IOException
	 * @throws SAXException
	 */
	public static void domParser(Context context) throws ParserConfigurationException,
			SAXException, IOException {
		Resources resources = context.getResources();
		// 将xml文件转成输入流
		InputStream stream = resources.openRawResource(R.raw.person);
		// 抽象类:获取dom解析器工厂的对象
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// dom解析器对象
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 解析器解析流对象获取Document对象
		Document document = db.parse(stream);
		//获取整个文档元素(指的是所有标签)
		Element documentElement = document.getDocumentElement();
		//获取标签节点集合
		NodeList nodeList = documentElement.getElementsByTagName("person");
		
		for (int i = 0; i < nodeList.getLength(); i++) {
			//获取节点元素
			Node node = nodeList.item(i);
			//节点名字
//			node.getNodeName();
			//将节点强转成元素对象
			Element eachPerson = (Element) node;
			//获取id属性对应的值
			String id = eachPerson.getAttribute("id");
			//当前节点的所有子节点
			NodeList childNodes = eachPerson.getChildNodes();
			String name = "";
			String age = "";
			for (int j = 0; j < childNodes.getLength(); j++) {
				Node item = childNodes.item(j);
				//可能在当前节点头标签和尾标签写一个值,也算一个节点,但是该节点不是一个元素
				//所以不能转成元素,可能会出现强转异常,只有有标签的才能转成元素
				if (item instanceof Element) {
					Element element = (Element) item;
					//获取节点的名字
					String nodeName = element.getNodeName();
					if ("name".equals(nodeName)) {
						//获取节点值
//						name = element.getNodeValue();
						NodeList nodes = element.getChildNodes();
						Node item2 = nodes.item(0);
						name = item2.getNodeValue();
					}else if ("age".equals(nodeName)) {
//						age = element.getNodeValue();
						NodeList nodes = element.getChildNodes();
						Node item2 = nodes.item(0);
						age = item2.getNodeValue();
					}
				}
			}
			System.out.println("id---"+id+",name---"+name+",age----"+age);
		}
	
	
	
	
	
	
	
	
	
	}
}

此处我解析的是自定义的XML文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<person>

    <person id="1">
        <name>mike</name>
        <age>20</age>
    </person>
	<person id="2">
        <name>jack</name>
        <age>22</age>
    </person>
    <person id="3">
        <name>rose</name>
        <age>21</age>
    </person>
</person>
如果要解析网络的XML文件,只需使用HttpUrlConnection或者HttpClient进行网络连接,获取输入流即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值