昨天晚上发了一篇用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,而不是其他的包,好了,今天就到这里,洗澡睡觉去,明天还要上班
相关推荐
以下是一些关于解析XML文件的知识点: 1. XML结构: - 根元素:XML文档必须有一个根元素,所有其他元素都包含在这个根元素内。 - 元素:XML中的基本单位,用尖括号 `< >` 包围,如 `<book>`。 - 属性:元素可以...
**DOM4J学习笔记** DOM4J是一个强大的Java XML API,它提供了丰富的XML处理功能,包括文档构建、解析、修改和查询。作为一个开源项目,DOM4J在XML处理领域具有广泛的用户基础,因其简单易用和高效性能而备受青睐。...
**标题:** Dom4j 解析Xml文档及 XPath查询 学习笔记 **正文:** XML(eXtensible Markup Language)是一种标记语言,常用于数据交换、配置存储以及文档结构化表示。在Java世界中,解析XML文档有多种库,其中Dom4j是...
### DOM4j解析XML知识点详解 #### 一、DOM4j简介 DOM4j是一个用于处理XML文档的Java库,其名称来源于“Document Object Model for Java”,但它与标准的DOM API并不完全相同,而是提供了更为简便和高效的方式来...
标题"Dom4j学习教程+API+xml实用大全+xml学习笔记+htc"提及了几个关键主题,包括Dom4j的学习资源、API文档,以及关于XML的实用指南和学习笔记,还提到了一个名为"htc"的文件,可能是关于HTC设备或技术的文档。...
1. 解析XML:使用DocumentBuilder解析XML文件,创建Document对象,例如`Document document = DocumentHelper.parseText(xmlString);` 2. 访问元素:通过Element的`getRootElement()`获取根元素,`element.element...
6. DOM和SAX解析:DOM(文档对象模型)解析器将整个XML文档加载到内存中,方便遍历和修改;SAX(简单API for XML)是事件驱动的解析器,适用于大文件或内存受限的情况。 这些笔记涵盖了Web开发的基础知识,适合初学...
由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...
这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...
Pull解析器是Android提供的轻量级解析XML的方式,它不需要像DOM解析那样一次性加载整个XML文档到内存中,而是通过事件驱动的方式,按需读取XML节点,降低了内存消耗,适合处理大型XML文件。 三、PullParser的工作...
调用`DocumentBuilder`的`parse()`方法,传入XML文件路径,解析XML并返回一个`Document`对象。`Document`对象是整个XML文档的根节点,包含所有其他节点。 4. **操作XML数据**: `Document`对象提供了许多方法,如...
在XML的应用中,DOM(Document Object Model)和SAX(Simple API for XML)是常见的解析方式。DOM将整个XML文档加载到内存中,形成一棵树形结构,允许开发者遍历和修改文档的任何部分,适合处理小到中等规模的XML...
在“pugixml学习笔记1 加载文件”中,我们将探讨如何利用pugixml库来加载XML文件,包括从内存、文件、字符串和流中加载。 首先,我们需要了解pugixml的核心类:`pugi::xml_document`、`pugi::xml_node`和`pugi::xml...
- **解析XML文档**:通过SAXReader或DocumentBuilder可以解析XML文件,得到Document对象,进而访问XML结构。 - **遍历元素**:使用迭代器或者XPath表达式可以遍历XML文档中的所有元素。 3. **XPath支持**: DOM4...
**标题解析:** "Dom4j学习笔记" 这个标题明确指出了我们要探讨的主题——Dom4j。Dom4j是一个流行的Java库,用于处理XML文档。它提供了丰富的API,使得XML的读取、写入、操作变得简单易行。在学习笔记中,通常会涵盖...
DOM4J使用SAXReader类来解析XML文档。在示例代码中,第14行创建了一个SAXReader实例,然后在第15行通过`read(URL url)`方法读取指定URL的XML文件并将其转换为Document对象。这种方法允许快速、有效地处理大型XML...
**DOM4J学习笔记** DOM4J是一个Java库,它提供了强大的XML处理功能,包括解析、操作和生成XML文档。这个库是开源的,广泛应用于Java应用程序中,特别是在需要处理XML数据时。DOM4J的设计目标是易于使用,同时保持高...
Python学习笔记5的知识点包括: 1. datetime模块的使用:datetime是Python处理日期和时间的标准库,可以完成多种与日期和时间相关的工作。 - 获取当前日期和时间:使用datetime.now()函数可以获取当前的日期和...
由于提供的文件信息中包含了大量的XML学习资料,且内容比较丰富,我们将逐一详细解释这些内容所涵盖的知识点。 **XML简介** XML是Extensible Markup Language(可扩展标记语言)的缩写,它是一种用于标记电子文件...
【XML 高级学习笔记】 XML(Extensible Markup Language)是一种可扩展标记语言,与HTML类似,但其设计目标是存储和传输数据,而非呈现数据。XML允许用户自定义标签,使得它成为一种自描述的语言,并且是W3C的标准...