学习Android的朋友欢迎加入:群 59324839(QQ)
XML文件解析
Xml文件解析
SAX(事件驱动)//1:Element Node 2:text Node
<?xml version="1.0" encoding="UTF-8" ?> --(start document)--1
<persons>-------------------------------------(start Element)------2
<person>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person>
<person id="20">
<name>lixiangmei</name>
<age>25</age>
</person>
</persons>
说明:事件驱动---流式处理
1:startDocutment();
当遇到文档的开头的时候调用这个方法,可以在其中做一些预处理的工作
2:endDocument();
和1想对应,在其中可以做一些善后的处理
3:startElement(String namespaceURI, String localName, String qName, Attributes atts)
namespaceURI命名空间(如:<jsp:include>中的jsp)
localName不带命名空间的前缀标签名 (如:<jsp:include>中的include)
qName: 带命名空间的前缀标签名 (如:<jsp:include>中的jsp:include)
atts可以通过其得到所有属性与值
4:endElements(String url, String localName, String name)
与3对应,不同的是在结束标签的时候进行调用
5:characters(char[] ch, int start, int length)—文本Node事件
用于处理在xml文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组的起始位置和长度,使用newString(ch,start,length)就可以得到内容
实现步骤:
1:SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
Parser.parse(inputStream,handler);
2实现handler
步骤:
1:extends DefaultHandler(list tag)
重写:[1]characters [2]startDoucment [3]startElement [4]endElement
DOM(文件树—内存消耗大)
优点:xml代码直观,
<?xml version="1.0" encoding="UTF-8" ?> --(start document)--1
<persons>-------------------------------------(start Element)------2
<person>
<person id="23">
<name>liming</name>
<age>30</age>
</person>
<person>
<person id="20">
<name>lixiangmei</name>
<age>25</age>
</person>
</persons>
实现步骤:
1:public static List<Person> getPersons(InputStream inStream) throws Throwable{
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document documnet = builder.parse(inStream);
Element root = documnet.getDocumentElement();
NodeList personNodes = root.getElementsByTagName("person");
for(int i=0 ; i < personNodes.getLength(); i++){
Person person = new Person();
Element personElement = (Element)personNodes.item(i);
person.setId(new Integer(personElement.getAttribute("id")));
NodeList personChilds = personElement.getChildNodes();
for(int y=0 ; y < personChilds.getLength(); y++){
if(personChilds.item(y).getNodeType()==Node.ELEMENT_NODE){//判断当前节点是否是元素类型节点
Element childElement = (Element)personChilds.item(y);
if("name".equals(childElement.getNodeName())){
person.setName(childElement.getFirstChild().getNodeValue());
}else if("age".equals(childElement.getNodeName())){
person.setAge(new Short(childElement.getFirstChild().getNodeValue()));
}
}
}
persons.add(person);
}
return persons;
}
PULL解析
public static List<Person> getPersons(InputStream inStream) throws Throwable{
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inStream, "UTF-8");
int eventType = parser.getEventType();//产生第一个事件
while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
String name = parser.getName();//获取解析器当前指向的元素的名称
if("person".equals(name)){
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}
if(person!=null){
if("name".equals(name)){
person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
}
if("age".equals(name)){
person.setAge(new Short(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){
persons.add(person);
person = null;
}
break;
}
eventType = parser.next();
}
return persons;
}
Xml文件解析总结:
SAX:(通过相关Factory得到);
如:parser对象
Parser.Parser(InStream,DefaultHandler);
其中最为主要的就是这个DefaultHandler;我们通过一个内部类(由于android考虑的内存方面的问题,所以一般使用内部类)进行实现;
其中重写一下几个方法:
1:startElement() endElement() startDocument() Characters()
2:然后就是不同的事件进行不同的处理
PULL(直接通过Xml得到对象):parser为解析对象;主要得到一个EventType():事件类型
根据这个时间类型在最后做循环:Tag = parser.next();
元素操作:1:得到节点名—parser.getName();
2:得到节点内容(Text)parser.nextText();
3:得到节点中属性的值:parser.getAttributeValue(index);
发表评论
-
Android临时数据缓存方法
2011-07-22 22:58 2010学习Android的朋友欢迎加入:群 59324839(QQ) ... -
ContentProvider内容提供者
2011-07-22 22:58 1338学习Android的朋友欢迎加入:群 59324839(Q ... -
android网络
2011-07-22 22:57 1097学习Android的朋友欢迎加入:群 59324839(Q ... -
SQLite数据库
2011-07-22 22:55 873学习Android的朋友欢迎加入:群 59324839(QQ) ... -
Android SharedPreferences
2011-07-22 22:53 1074学习Android的朋友欢迎加入:群 59324839(Q ... -
Android XMl写入
2011-07-22 22:51 1158学习Android的朋友欢迎加入:群 59324839(Q ... -
Android 权限配置
2011-07-22 22:51 1473学习Android的朋友欢迎加入:群 59324839(Q ... -
Android 文件操作
2011-07-22 22:45 946学习Android的朋友欢迎加入:群 59324839(QQ) ... -
Android Dialog的使用
2011-07-22 22:44 1049学习Android的朋友欢迎加入:群 59324839(QQ) ... -
android 技术讨论群(QQ)
2011-07-04 22:18 412android 学习群; 可供广大群从参加! 初学者欢 ... -
SQL判断一个表在系统中是否存在
2011-07-03 18:49 1606/** * 判断某张表是否存在 * @ ... -
android 对话框应用
2011-06-28 00:21 927啥都别说了,看效果吧! new AlertDialog ... -
ContentProvider
2011-06-27 21:13 3501在 Android中,对于数据的存贮,有几种方式,有文件方式 ... -
android 权限大全
2011-06-14 00:19 925java.net.SocketException: Perm ... -
android GUI线程安全
2011-06-11 18:28 1316Activity:运行于主线程。因Android的GUI是 ... -
android Intent和菜单的使用
2011-06-11 01:55 903首先我们需要知道Intent这个东西是用来干什么的: ... -
android 下载程序
2011-06-10 00:34 1075HttpDownloader 文件: package zho ... -
android SQLite使用
2011-06-10 00:33 1443package zhou.demo.sql; impor ... -
android Handler and progress
2011-06-10 00:31 834package zhou.demo; import andr ... -
android Handler使用
2011-06-10 00:31 926package zhou.demo; import andr ...
相关推荐
Android XML 解析工具类 Android XML 解析工具类是一个功能强大且实用的工具类,提供了多种方法来解析 XML 文档。该工具类提供了四种方法来获取 XML 节点的内容,分别是 getMarkString、getMarkString、...
XML解析是将XML文档转换为Java对象的过程,这对于Android应用程序的资源配置、布局定义以及数据交换至关重要。这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看...
Android支持多种XML解析技术,包括DOM、SAX和Pull解析。每种方法都有其特定的优势和应用场景。 #### DOM解析XML DOM(Document Object Model)解析是一种将整个XML文档加载到内存中,并构建出一棵树状结构(称为DOM...
本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...
Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...
解析安卓的strings xml colors xml dimens xml等 共4个方法 String[] getStringArray InputStream String String getString InputStream String String getColor InputStream String String getDimens ...
本篇文章将深入探讨Android系统中的XML解析源码,包括DOM、SAX和Pull解析器的工作原理。 一、XML解析方式 1. DOM解析:Document Object Model(DOM)解析器将整个XML文档加载到内存中,形成一个树形结构,称为DOM...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
在Android 10中,XML解析相关的优化和更新包括对XML解析器性能的改进,以及对Android Jetpack库的更新,这些库可能包含了对XStream或其他XML解析库的依赖。 总的来说,XStream作为一个强大的XML解析工具,为Android...
本文将深入探讨Android系统中的XML解析技术,包括DOM(Document Object Model)、SAX(Simple API for XML)和PullParser解析方式,并结合提供的资源进行详细说明。 **DOM解析** DOM解析器会将整个XML文档加载到...
在Android应用中,我们通常使用两种方式来解析XML:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析: DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历...
在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...
Android XML 多种解析生成 Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法...
本文将深入探讨Android中的三种XML解析方式:SAX(Simple API for XML)、Pull Parser和DOM(Document Object Model),以及如何生成XML文件。 ### 1. SAX解析 SAX解析器是基于事件驱动的解析模型,它逐行读取XML...
在Android中,有多种解析XML的方法,如DOM、SAX和Pull解析器。本篇主要讨论的是SAX解析,这是一种基于事件驱动的、高效的解析方式,适合处理大体积的XML文件。 SAX解析器逐行读取XML文档,当遇到开始标签、结束标签...
在本示例中,我们关注的是"android xml解析",这涉及到如何从XML文档中提取信息并将其应用于应用程序,比如获取天气预报。XML解析在Android中的应用广泛,包括读取配置文件、与服务器进行数据交互等。 Android提供...
SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...
本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...
本教程将深入探讨Android中的三种主要XML解析方法:SAX(Simple API for XML)、Pull解析器以及DOM(Document Object Model),并提供源代码示例。 1. SAX解析: SAX是一种事件驱动的解析器,它不会将整个XML文档...
总结起来,Android中的XML解析是一个重要的任务,SAX解析器提供了一种高效且节省内存的方式处理XML数据。通过创建一个事件处理器并重写其方法,我们可以根据需要定制解析过程,轻松地提取XML文件中的标签和数据。在...