package com.xiva.service;
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 com.xiva.domain.Person;
/**
* @decription 适合解析小存储的xml文件
* @author XIVA
*
*/
public class DOMService {
public static List<Person> readXML(InputStream is) throws Exception
{
List<Person> personList = new ArrayList<Person>();
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dombuilder = domFactory.newDocumentBuilder();
Document document = dombuilder.parse(is);
Element root = document.getDocumentElement();
NodeList nodes = root.getElementsByTagName("person");
for(int i=0;i<nodes.getLength();i++){
Element element = (Element) nodes.item(i);
Person person = new Person();
person.setId(new Integer(element.getAttribute("id")));
NodeList childNodes = element.getChildNodes();
for(int j=0;j<childNodes.getLength();j++){
Node childNode = (Node) childNodes.item(j);
if(childNode.getNodeType() == Element.ELEMENT_NODE)
{
Element childElement = (Element) childNode;
childElement.getLocalName();
childElement.getNodeName();
childElement.getNodeValue();
childElement.getTagName();
if("age".equals(childElement.getTagName()))
{
person.setAge(childElement.getFirstChild().getNodeValue());
}else if("name".equals(childElement.getTagName())){
person.setPersonName(childElement.getFirstChild().getNodeValue());
}
}
}
personList.add(person);
}
return personList;
}
}
完整代码见附件,DOM与SAX解析的区别在于SAX解析需要一个handler,并触发handler里面的所有事件;而DOM的解析主要需要分析NodeList里面所含值!
分享到:
相关推荐
在Android开发中,DOM(Document Object Model)解析是一种常见的处理XML文件的方式。DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便...
最后,使用创建的解析器和处理器读取XML文件: ```java InputStream is = context.getResources().openRawResource(R.raw.xmlFile); // 获取XML文件输入流 saxParser.parse(is, new MyHandler()); is.close(); ``` ...
SAX解析器是事件驱动的,它逐行读取XML文件,遇到每个元素时触发相应的事件。这种方式适用于处理大型XML文件,因为它不需要一次性加载整个文件。 在"ReadXMLDemo"中,使用SAX解析的步骤如下: - 实现`...
1. **Android读取Excel文件**: - Android本身并不支持直接读取Excel文件,因为这些文件通常由Microsoft Office或类似的桌面应用程序创建。要读取Excel文件,需要引入第三方库,如jxl.jar,这是一个Java库,可以...
本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...
在Android开发中,XML文件广泛用于存储数据、配置文件以及应用程序间的数据交换。本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 ...
DOM解析器读取XML文件并构建一个内存中的节点树,其中每个元素、属性、文本等都对应一个节点。在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析...
### Android读取DOM文件知识点详解 #### 一、概述 在Android开发中,XML文件是一种常用的数据存储格式,尤其适用于存储结构化的数据。DOM(Document Object Model)是一种处理XML的标准方式,它将整个XML文档加载...
2. **SAX解析器**:Simple API for XML(SAX)解析器采用事件驱动模型,逐行读取XML文件,遇到元素、属性等时触发相应的回调函数,不会一次性加载整个文件,适合处理大文件。 3. **Pull解析器**:类似于SAX解析器,...
对于XML的读取,有多种方法,其中DOM(Document Object Model)和DOM4J是比较常见的。 1. DOM解析: DOM解析方式将整个XML文件加载到内存中,形成一个树形结构。这种方式便于对XML进行随机访问,但缺点是对大文件...
在Android开发中,读取网上XML文件是一项常见的任务,尤其当需要从远程服务器获取结构化数据时。XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言,它的结构清晰,易于解析。本篇文章将深入...
总结来说,通过PHP的ZipArchive类,我们能够方便地读取Android APK文件内的XML资源,这对开发者在分析、测试或自动化处理APK时提供了一种有效且独立的解决方案。这种方法不仅简化了流程,也降低了对系统环境的要求,...
SAX是一种基于事件驱动的XML解析方式,其工作原理是在读取XML文档时,每当遇到特定的事件(如开始标签、结束标签等)时触发相应的事件处理方法。与DOM(Document Object Model)解析方式不同,SAX不需要将整个XML...
SAX解析器逐行读取XML文件,当遇到特定的标签时,会触发回调函数。这种方式非常适用于处理大型XML文件,因为它只占用少量内存。在Android中,可以使用`org.xml.sax`包下的类来实现SAX解析。`DomXmlOperate`中可能...
SAX(Simple API for XML)是事件驱动的解析器,逐行读取XML,触发相应的事件处理器。这种方式内存效率高,适用于处理大文件。 - **Pull解析器(android_pull_xml)** Pull解析器也是事件驱动,但它允许开发者...
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
Android提供了多种方式来读取XML资源,包括从assets目录、res/raw目录或网络中加载。这里我们假设XML文件已经存储在项目的assets目录下,名为“myxml.xml”。 ```java InputStream inputStream = context.getAssets...
2. SAX解析器:与DOM不同,SAX采用事件驱动模型,逐行读取XML文件,遇到元素、属性等时触发相应的回调函数。这种方式适用于处理大文件,因为它不需要一次性加载整个XML。然而,SAX解析器需要开发者手动编写回调函数...