解析如下xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>GIS</name>
<age>23</age>
</person>
<person id="2">
<name>ArcGIS</name>
<age>24</age>
</person>
</persons>

xml

创建一个person对象

 public class Person {
private Integer id;
private String name;
private Short age; public Person(){} public Person(Integer id, String name, Short age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
} }

Person

1.dom解析

 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;
/**
* DOM解析XML
* @author GIS
*
*/
public class DOMService {
public List<Person> getHongXml(InputStream inStream) throws Throwable {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inStream);//结束后以文档树的方式存放在内存
Element root = document.getDocumentElement();
NodeList persoNodes = root.getElementsByTagName("person");
for (int i = 0; i < persoNodes.getLength(); i++) {
Person person = new Person();
Element personElement = (Element)persoNodes.item(i);
person.setId(new Integer(personElement.getAttribute("id")));
NodeList personChilds = personElement.getChildNodes();
for (int j = 0; j < personChilds.getLength(); j++) {
if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {//判断当前节点是否是元素类型节点
Element childElement = (Element)personChilds.item(j);
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;
} }

DOMService

2.pull解析

 import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer; import android.util.Xml;
import yu.entity.Person; /**
* 采用Pull解析器解析XML内容
*
* @author GIS
*
*/
public class PullService {
/**
* 采用Pull解析器生成XML内容
* @param persons
* @param outputStream
* @throws Throwable
*/
public static void save(List<Person> persons, OutputStream outputStream)
throws Throwable {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(outputStream, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString()); serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name"); serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age"); serializer.endTag(null, "person");
} serializer.endTag(null, "persons");
serializer.endDocument();
outputStream.flush();
outputStream.close();
} /**
* 采用Pull解析器生成XML内容,使用Writer
* @param persons
* @param writer
* @throws Throwable
*/
public static void saveWrite(List<Person> persons, Writer writer)
throws Throwable {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for (Person person : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString()); serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name"); serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age"); serializer.endTag(null, "person");
} serializer.endTag(null, "persons");
serializer.endDocument();
writer.flush();
writer.close();
} /**
* 采用Pull解析器解析XML内容
*
* @param inStream
* @return
* @throws Throwable
*/
public List<Person> getHongXml(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(Integer.valueOf(parser.getAttributeValue(0)));
} else if (person != null) {
if ("name".equals(name)) {
person.setName(parser.nextText());// 获取解析器当前元素的下一个文本节点的值
} else if ("age".equals(name)) {
person.setAge(Short.valueOf(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
persons.add(person);
person = null;
}
break;
} eventType = parser.next();
}
return persons; }
public static Integer lastId(InputStream inStream) throws Throwable{
int id = 0;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inStream, "UTF-8");
int eventType = parser.getEventType();// 产生第一个事件
do {
if (eventType == XmlPullParser.START_TAG) {
String name = parser.getName();// 获得解析器当前指向的元素的名称
if ("person".equals(name)) {
id = Integer.valueOf(parser.getAttributeValue(0));
}
}
eventType = parser.next();
} while (eventType != XmlPullParser.END_DOCUMENT);
return id;
} }

PullService

3.SAXServer解析

 import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 采用SAX解析XML
* @author GIS
*
*/
public class SAXService { public List<Person> getHongXml(InputStream inStream) throws Throwable {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
ContentParser contentParser = new ContentParser();
parser.parse(inStream, contentParser);
inStream.close();
return contentParser.getPersons();
}
private final class ContentParser extends DefaultHandler{
private List<Person> persons = null;
public List<Person> getPersons() {
return persons;
} private String tag = null;
private Person person = null;
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("person".equals(localName)) {
person = new Person();
person.setId(new Integer(attributes.getValue(0)));
}
tag = localName;
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("person".equals(localName)) {
persons.add(person);
person =null;
}
tag = null;
} @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (tag != null) {
String data = new String(ch, start, length);//获取文本节点的数据
if ("name".equals(tag)) {
person.setName(data);
}else if ("age".equals(tag)) {
person.setAge(new Short(data));
}
}
} } }

SAXService

调用,这里举例用sax调用

 SAXService service = new SAXService();
InputStream inStream = getClass().getClassLoader().getResourceAsStream(
"×××.xml");//放在src下,或此处变成网络路径下
List<Person> persons = service.getHongXml(inStream);
for (Person person : persons) {
Log.i(TAG, person.toString());
}

Android解析xml文件-采用DOM,PULL,SAX三种方法解析的更多相关文章

  1. 提交(post)xml文件给指定url的2种方法

    原文:提交(post)xml文件给指定url的2种方法 1  这段代码是在网上搜到的,拿来共享,项目正好要用到.其中的data你只需要传递一个xml字符串就可以 protected   string  ...

  2. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  3. schema文件及XML文件的DOM和Sax解析

    schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ...

  4. 用JDK自带的包来解析XML文件(DOM+xpath)

    DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom.org.xml.sax 和javax.xml.parsers包就可以满意条件了.(1)org.w3c.do ...

  5. Java/JSP获得客户端网卡MAC地址的三种方法解析

    java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...

  6. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  7. 用JDOM解析XML文件时如何解决中文问题?如何解析?

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

  8. Python 文件行数读取的三种方法

    Python三种文件行数读取的方法: #文件比较小 count = len(open(r"d:\lines_test.txt",'rU').readlines()) print c ...

  9. QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例

    0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...

随机推荐

  1. Vuex 模块化与项目实例 (2.0)

    Vuex 强调使用单一状态树,即在一个项目里只有一个 store,这个 store 集中管理了项目中所有的数据以及对数据的操作行为.但是这样带来的问题是 store 可能会非常臃肿庞大不易维护,所以就 ...

  2. Sublime Text 3 修改配色主题【侧边框之...】

    Sublime Text3 是挺喜欢的一款编辑器,一周五天朝九晚六面对,而默认的侧边栏颜色总显得不尽人意.右侧的代码高亮[color_scheme:Monokai]挺喜欢的,心里就想着如何把侧边栏也给 ...

  3. ZooKeeper的注意事项

    在ZooKeeper中存储的数据是以字节数组的形式存储的,当用Java程序处理数据时要注意. Ephemeral znodes并不会有child znode 只有parent-znode存在,才能创建 ...

  4. css特殊字符编码

  5. Codeforce 水题报告

    最近做了好多CF的题的说,很多cf的题都很有启发性觉得很有必要总结一下,再加上上次写题解因为太简单被老师骂了,所以这次决定总结一下,也发表一下停课一星期的感想= = Codeforces 261E M ...

  6. ajax面试汇总

    Ajax系列面试题总结: 1.Ajax 是什么? 如何创建一个Ajax? Ajax并不算是一种新的技术,全称是asychronous javascript and xml,可以说是已有技术的组合,主要 ...

  7. 【WCF】服务并发中的“可重入模式”

    WCF服务实例的并发模式是在服务实现类上,使用 ServiceBehaviorAttribute 的 ConcurrencyMode 属性来指定.其值由 ConcurrencyMode 枚举来界定,这 ...

  8. 虚拟机Centos开机以后,有eth0网卡,但是没有IP,Determine IP information for eth0.. no link present check cable

    Determine IP information for eth0.. no link present check cable 如果你的VMware虚拟机centos6.5使用NAT模式,开机以后,使 ...

  9. Keepalived安装与配置

      下载并解压Keepalived安装包到两台nginx所在的服务器   192.168.200.1   192.168.200.2     执行编译安装(安装目录设置为 /usr/local/kee ...

  10. Ognl值栈对象及struts标签

    用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...