XML文件解析之DOM解析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hanhan1016/article/details/50538232
1.XML概念
XML:可扩展标志语言  Extensible Markup Language
(1)是一种很像超文本标记语言(HTML)的标记语言
(2)它的设计宗旨是传输和存储数据,而不是显示数据(HTML是用来显示数据)
(3)最大特点是:它的标签没有被预定义

2.DOM解析思路
DOM解析XML时,会将XML文化中所有的内容以文档树的方式存在内存中,然后用户通过使用DOM API来遍历XML书、获得所需要的数据。

优点:整个文档读入内存,方便操作,直观,简单。
缺点:整个文档读入内存,内存消耗比较大。

3.DOM解析步骤
(1).使用DocumentBuilderFactory创建DocumentBuilderFactory实例。
(2).使用DocumentBuilderFactory实例来创建DocumentBilder。
(3).加载解析XML文件(Document)。
(4).获取文档的根节点(Element)。
(5).获取根节点中所有子节点的列表(NodeList)。
(6).获取子节点列表中的需要读取的节点。

4.实例
private String domParseXml() {
		String str = null;
		List<Student> students = new ArrayList<Student>();

		DocumentBuilderFactory factory = null;
		DocumentBuilder builder = null;
		Document document = null;
		InputStream is = null;

		// 1.创建DocumentBuilderFactory实例
		factory = DocumentBuilderFactory.newInstance();

		try {
			// 2.利用DocumentBuilderFactory实例创建DocumentBuilder实例
			builder = factory.newDocumentBuilder();

			try {
				// 3.加载xml文件到输入流
				is = getResources().getAssets().open("dom_info.xml");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			try {
				// 4.解析xml文档并放在Document对象中
				document = builder.parse(is);
			} catch (SAXException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// 5.得到根元素
			Element root = document.getDocumentElement();
            // 6.获得student节点,并保存在列表中
			NodeList nodes = root.getElementsByTagName("student");

			Student student = null;

			for (int i = 0; i < nodes.getLength(); i++) {
				student = new Student();
				Element studentElement = (Element) (nodes.item(i));
				student.setId(studentElement.getAttribute("id"));
				Element studentNameElement = (Element) studentElement
						.getElementsByTagName("name").item(0);
				Element studentGenderElement = (Element) studentElement
						.getElementsByTagName("gender").item(0);
				Element studentAgeElement = (Element) studentElement
						.getElementsByTagName("age").item(0);
				student.setName(studentNameElement.getFirstChild()
						.getNodeValue());
				student.setGender(studentGenderElement.getFirstChild()
						.getNodeValue());
				student.setAge(studentAgeElement.getFirstChild().getNodeValue());
				str = str + student.toString();
				students.add(student);
			}

		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return str;

	}
<?xml version="1.0" encoding="utf-8"?>
	<students>
		<student id="0">
			<name>zhangmq</name>
			<gender>female</gender>
			<age>24</age>
		</student>
		<student id="1">
			<name>zhouhy</name>
			<gender>male</gender>
			<age>24</age>
		</student>
	</students>

5.概念
Node:节点,相对于tree这种数据结构而言。
Element:元素,是xml中的概念。<xxx>就是一个元素。
Attribute:属性,可有可无,name-value一一对应。


展开阅读全文

没有更多推荐了,返回首页