首页 > 编程知识 正文

android xmlns,android public.xml

时间:2023-05-03 16:49:52 阅读:208639 作者:1966

前言     在学习Android的Framework层源码时,Android大量的使用XmlPullParser来解析xml文件的源码。因此,这里也顺道介绍一下XmlPullParser的使用。
XML     XML(eXtensible Markup Language)中文名为可扩展标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。 用途     XML设计用了传送及携带数据信息,不用了表现或展示数据,HTML语言则用了表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。 丰富文件——自定文件描述并使其更丰富元数据——描述其它文件或网络资讯配置文档——描述软件设置的参数 结构     每个XML文档都由XML序言开始,在前面的代码中第一行就是XML序言,<?xml version="1.0"?>。这一行代码会告诉解析器或浏览器这个文件应该按照XML规则进行解析。但是,根元素的名称是由文档类型定义或XML纲要定义的。
XmlPullParser     PULL解析xml是基于事件驱动的方式解析XML文件,pull开始解析时,我们可以先通过getEventType()方法获取当前解析事件类型,并且通过next()方法获取下一个解析事件类型。PULL解析器提供了START_DOCUMENT(开始文档)、END_DOCUMENT(结束文档)、START_TAG(开始标签)、END_TAG(结束标签)四种事件解析类型。当处于某个元素时,可以调用getAttributeValue()方法获取属性的值,也可以通过nextText()方法获取本节点的文本值。下面通过一个例子来进行解析。 xml示例文件     需要解析的xml示例文件代码如下: <?xml version="1.0" encoding="UTF-8"?><colleagues> <colleague id="1"> <name>耗子</name> <age>24</age> <sex>boy</sex> </colleague> <colleague id="2"> <name>璐璐</name> <age>28</age> <sex>girl</sex> </colleague> <colleague id="3"> <name>lldyx</name> <age>26</age> <sex>boy</sex> </colleague></colleagues> XmlPullParser解析器 package com.example.shakedemo;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.R.xml;import android.util.Log;import android.util.Xml;public class XmlPullParserHelper {public static List<Colleague> getColleagues(String xmlFilePath) {List<Colleague> colleagues = new ArrayList<Colleague>();FileReader xmlReader = null;try {xmlReader = new FileReader(new File(xmlFilePath));} catch (FileNotFoundException e) {Log.e("wzy", "Couldn't find xml file " + xmlFilePath);return colleagues;}try {// 方式1: 使用 Android 提供的android.util.Xml 类获取 parser 对象XmlPullParser parser = Xml.newPullParser();// 方式2: 使用工厂类 XmlPullParserFactory// XmlPullParserFactory pullFactory =// XmlPullParserFactory.newInstance();// XmlPullParser parser = pullFactory.newPullParser();// 设置文件输入流parser.setInput(xmlReader);// 得到当前事件类型int eventType = parser.getEventType();Colleague colleague = null;while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:/** * 通过getName判断读到哪个标签, 然后通过nextText获取文本节点值, * 或者通过getAttributeValue(i)获取属性节点值 */String name = parser.getName();if ("colleague".equals(name)) {colleague = new Colleague();colleague.setId(Integer.parseInt(parser.getAttributeValue(null, "id")));} else if ("name".equals(name)) {if (colleague != null) {colleague.setName(parser.nextText());}} else if ("age".equals(name)) {if (colleague != null) {colleague.setAge(Integer.parseInt(parser.nextText()));}} else if ("sex".equals(name)) {if (colleague != null) {colleague.setSex(parser.nextText());}}break;case XmlPullParser.END_TAG:if ("colleague".equals(parser.getName()) && colleague != null) {colleagues.add(colleague);colleague = null;}break;}eventType = parser.next();}xmlReader.close();} catch (XmlPullParserException e) {// Do nothing} catch (IOException e) {// Do nothing}return colleagues;}}    其中,colleague类的定义比较简单,代码如下: package com.example.shakedemo;public class Colleague {private int id;private int age;private String name;private String sex;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "ID is " + id + ", Name is " + name + ", Sex is " + sex;}}    有时间,我会考虑增加其他XML文件的解析方法!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。