`
king_tt
  • 浏览: 2232694 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

个人学习笔记之-DOM解析XML文件

    博客分类:
  • xml
阅读更多

昨天晚上发了一篇用SAX解析XML文件的博客,有兴趣的可以去看下,今天我用的DOM解析,DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低。

XML基本的节点类型

node - DOM基本的数据类型

Element - 最主要处理的对象是Element

Attr - 元素的属性

Text - 一个Element 或者Attr的实际内容

Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树

 

1.在src目录下新建一个android.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="23">
        <name>xiaanming</name>
        <age>23</age>
    </person>
    <person id="20">
        <name>liudehua</name>
        <age>28</age>
    </person>
</persons>


2.新建一个Person对象来存放解析的内容

package com.example.dom_parser;

public class Person {
	private int id;
	private String name;
	private int age;
	
	public Person(){}
	
	public Person(int id, String name, int age){
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "id = " + id + ", name = " + name + ", age = " + age;
	}
	
}

3 新建一个DomPersonService.class,注释我写的清楚,大家自己看

package com.example.dom_parser;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.util.Log;


public class DomPersonService {
	
	
	public static List<Person> readXML() throws Throwable{
		//获得android.xml文件的输入流
		InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("android.xml");
		List<Person> persons = new ArrayList<Person>();
		
		//实例化DocumentBuilderFactory和DocumentBuilder,并创建Document
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(is);
		
		//返回文档的根(root)元素
		Element rootElement =  document.getDocumentElement();
		
		//获取一个Note(DOM基本的数据类型)集合,这里有两个person Note
		NodeList nodes = rootElement.getElementsByTagName("person");
		
		//遍历Note集合
		for(int i=0; i<nodes.getLength(); i++){
			//先从第一个person元素开始解析
			Element personElement = (Element) nodes.item(i);
			Person person = new Person();
			person.setId(Integer.valueOf(personElement.getAttribute("id")));
			
			//获取person下面的name 和 age 的Note集合
			NodeList chileNodes = personElement.getChildNodes();
			for(int y=0; y<chileNodes.getLength(); y++){
				Node childNode = chileNodes.item(y);
				
				//判断子Note的类型为元素Note
				if(childNode.getNodeType() == Node.ELEMENT_NODE){
					Element childElement = (Element) childNode;
				if("name".equals(childElement.getNodeName())){
					person.setName(childElement.getFirstChild().getNodeValue());
				}else if("age".equals(childElement.getNodeName())){
					person.setAge(Integer.valueOf(childElement.getFirstChild().getNodeValue()));
				}
				}
			}
			
			Log.e("log", person.toString());
			
			persons.add(person);
		}
		
		return persons;
		
	}
}

关于DOM解析XML,我们要清楚的知道个节点之间的关系,才能更好的操作对象树,值得注意的是在建立Element时,要注意jar包的导入, 要选择org.w3c.dom.Element,而不是其他的包,好了,今天就到这里,洗澡睡觉去,明天还要上班

SAX解析XML

Pull解析XML

分享到:
评论

相关推荐

    解析XML文件例子

    以下是一些关于解析XML文件的知识点: 1. XML结构: - 根元素:XML文档必须有一个根元素,所有其他元素都包含在这个根元素内。 - 元素:XML中的基本单位,用尖括号 `&lt; &gt;` 包围,如 `&lt;book&gt;`。 - 属性:元素可以...

    dom4j 学习笔记

    **DOM4J学习笔记** DOM4J是一个强大的Java XML API,它提供了丰富的XML处理功能,包括文档构建、解析、修改和查询。作为一个开源项目,DOM4J在XML处理领域具有广泛的用户基础,因其简单易用和高效性能而备受青睐。...

    Dom4j 解析Xml文档及 XPath查询 学习笔记

    **标题:** Dom4j 解析Xml文档及 XPath查询 学习笔记 **正文:** XML(eXtensible Markup Language)是一种标记语言,常用于数据交换、配置存储以及文档结构化表示。在Java世界中,解析XML文档有多种库,其中Dom4j是...

    dom4j解析XML(学习笔记)

    ### DOM4j解析XML知识点详解 #### 一、DOM4j简介 DOM4j是一个用于处理XML文档的Java库,其名称来源于“Document Object Model for Java”,但它与标准的DOM API并不完全相同,而是提供了更为简便和高效的方式来...

    Dom4j学习教程+API+xml实用大全+xml学习笔记+htc

    标题"Dom4j学习教程+API+xml实用大全+xml学习笔记+htc"提及了几个关键主题,包括Dom4j的学习资源、API文档,以及关于XML的实用指南和学习笔记,还提到了一个名为"htc"的文件,可能是关于HTC设备或技术的文档。...

    XML DOM4J学习笔记

    1. 解析XML:使用DocumentBuilder解析XML文件,创建Document对象,例如`Document document = DocumentHelper.parseText(xmlString);` 2. 访问元素:通过Element的`getRootElement()`获取根元素,`element.element...

    css-html-jsp-xml学习笔记

    6. DOM和SAX解析:DOM(文档对象模型)解析器将整个XML文档加载到内存中,方便遍历和修改;SAX(简单API for XML)是事件驱动的解析器,适用于大文件或内存受限的情况。 这些笔记涵盖了Web开发的基础知识,适合初学...

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    JavaScript高级程序设计2,学习笔记---第一篇

    这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...

    Android自学笔记-9-Pull方式处理XML

    Pull解析器是Android提供的轻量级解析XML的方式,它不需要像DOM解析那样一次性加载整个XML文档到内存中,而是通过事件驱动的方式,按需读取XML节点,降低了内存消耗,适合处理大型XML文件。 三、PullParser的工作...

    java与xml 学习笔记整理

    调用`DocumentBuilder`的`parse()`方法,传入XML文件路径,解析XML并返回一个`Document`对象。`Document`对象是整个XML文档的根节点,包含所有其他节点。 4. **操作XML数据**: `Document`对象提供了许多方法,如...

    XML基础学习笔记指南

    在XML的应用中,DOM(Document Object Model)和SAX(Simple API for XML)是常见的解析方式。DOM将整个XML文档加载到内存中,形成一棵树形结构,允许开发者遍历和修改文档的任何部分,适合处理小到中等规模的XML...

    pugixml学习笔记1 加载文件

    在“pugixml学习笔记1 加载文件”中,我们将探讨如何利用pugixml库来加载XML文件,包括从内存、文件、字符串和流中加载。 首先,我们需要了解pugixml的核心类:`pugi::xml_document`、`pugi::xml_node`和`pugi::xml...

    DOM4J学习笔记

    - **解析XML文档**:通过SAXReader或DocumentBuilder可以解析XML文件,得到Document对象,进而访问XML结构。 - **遍历元素**:使用迭代器或者XPath表达式可以遍历XML文档中的所有元素。 3. **XPath支持**: DOM4...

    Dom4j学习笔记

    **标题解析:** "Dom4j学习笔记" 这个标题明确指出了我们要探讨的主题——Dom4j。Dom4j是一个流行的Java库,用于处理XML文档。它提供了丰富的API,使得XML的读取、写入、操作变得简单易行。在学习笔记中,通常会涵盖...

    DOM4J笔记.学习如何应用DOM4J开发XML

    DOM4J使用SAXReader类来解析XML文档。在示例代码中,第14行创建了一个SAXReader实例,然后在第15行通过`read(URL url)`方法读取指定URL的XML文件并将其转换为Document对象。这种方法允许快速、有效地处理大型XML...

    dom4j学习笔记

    **DOM4J学习笔记** DOM4J是一个Java库,它提供了强大的XML处理功能,包括解析、操作和生成XML文档。这个库是开源的,广泛应用于Java应用程序中,特别是在需要处理XML数据时。DOM4J的设计目标是易于使用,同时保持高...

    最新Python学习笔记5

    Python学习笔记5的知识点包括: 1. datetime模块的使用:datetime是Python处理日期和时间的标准库,可以完成多种与日期和时间相关的工作。 - 获取当前日期和时间:使用datetime.now()函数可以获取当前的日期和...

    Xml学习笔记.pdf

    由于提供的文件信息中包含了大量的XML学习资料,且内容比较丰富,我们将逐一详细解释这些内容所涵盖的知识点。 **XML简介** XML是Extensible Markup Language(可扩展标记语言)的缩写,它是一种用于标记电子文件...

    Xml高级学习笔记

    【XML 高级学习笔记】 XML(Extensible Markup Language)是一种可扩展标记语言,与HTML类似,但其设计目标是存储和传输数据,而非呈现数据。XML允许用户自定义标签,使得它成为一种自描述的语言,并且是W3C的标准...

Global site tag (gtag.js) - Google Analytics