分别对Sax、Dom、Pull三种技术解析xml文件的实例,以及使用Pull保存xml文件。
person.xml
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person id="1001">
<name>张三</name>
<age>22</age>
<sex>男</sex>
</person>
<person id="1002">
<name>李四</name>
<age>21</age>
<sex>女</sex>
</person>
<person id="1003">
<name>王五</name>
<age>23</age>
<sex>男</sex>
</person>
<person id="1004">
<name>赵六</name>
<age>24</age>
<sex>女</sex>
</person>
<person id="1005">
<name>孙七</name>
<age>21</age>
<sex>女</sex>
</person>
</persons>
package com.myclover.xml.service;
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;
import com.myclover.xml.bean.Person;
/**
* 使用Sax技术解析XML文件
*
* @author myclover
*
*/
public class SAXParseXml {
/**
* 功能描述: 通过Sax解析XML文件 xml文件格式如下: <?xml version="1.0" encoding="utf-8"?>
* <persons> <person id="1001"> <name>张三</name> <age>22</age> <sex>男</sex>
* </person> </persons>
*
* @param ins
* XML文件输入流
* @return 返回值:xml文件中的数据集合
* @throws Exception
*/
public List<Person> getPersonList(InputStream ins) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
PersonHandler handler = new PersonHandler();
parser.parse(ins, handler);
return handler.getPersons();
}
// 定义一个内部类继承DefaultHandler
private final class PersonHandler extends DefaultHandler {
private List<Person> persons;
private Person person;
private String tag;
public List<Person> getPersons() {
return persons;
}
@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 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 Integer(data));
} else if ("sex".equals(tag)) {
person.setSex(data);
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("person".equals(localName)) {
persons.add(person);
person = null;
}
tag = null;
}
}
}
package com.myclover.xml.service;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.util.Log;
import android.util.Xml;
import com.myclover.xml.bean.Person;
/**
* 使用Pull技术解析和保存XML文件
*
* @author myclover
*
*/
@SuppressWarnings("all")
public class PullParseXml {
/**
* 功能描述: 通过Pull解析XML文件 xml文件格式如下: <?xml version="1.0" encoding="utf-8"?>
* <persons> <person id="1001"> <name>张三</name> <age>22</age> <sex>男</sex>
* </person> </persons>
*
* @param ins
* xml文件输入流
* @param encoding
* 字符编码
* @return 返回值:xml文件中的数据集合
* @throws Exception
*/
public static List<Person> getPersonList(InputStream ins, String encoding)
throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(ins, encoding);
// 触发一个事件
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(parser.getName())) {
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}
if (person != null) {
if ("name".equals(parser.getName())) {
person.setName(parser.nextText());
}
if ("age".equals(parser.getName())) {
person.setAge(new Integer(parser.nextText()));
}
if ("sex".equals(parser.getName())) {
person.setSex(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
persons.add(person);
person = null;
}
break;
}
event = parser.next();
}
return persons;
}
/**
* 功能描述: 通过Pull保存数据到XML文件中
*
* @param persons
* 用户信息集合
* @param outs
* 输出流
* @param encoding
* 字符编码
* @throws Exception
*/
public static void saveToXml(List<Person> persons, OutputStream outs,
String encoding) throws Exception {
XmlSerializer xmlSer = Xml.newSerializer();
xmlSer.setOutput(outs, encoding);
xmlSer.startDocument(encoding, true);
xmlSer.startTag(null, "persons");
for (Person p : persons) {
xmlSer.startTag(null, "person");
xmlSer.attribute(null, "id", String.valueOf(p.getId()));
xmlSer.startTag(null, "name");
xmlSer.text(p.getName());
xmlSer.endTag(null, "name");
xmlSer.startTag(null, "age");
xmlSer.text(String.valueOf(p.getAge()));
xmlSer.endTag(null, "age");
xmlSer.startTag(null, "sex");
xmlSer.text(p.getSex());
xmlSer.endTag(null, "sex");
xmlSer.endTag(null, "person");
}
xmlSer.endTag(null, "persons");
xmlSer.endDocument();
outs.flush();
outs.close();
}
}
package com.myclover.xml.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.myclover.xml.bean.Person;
/**
* 使用Dom技术解析XML文件
*
* @author myclover
*
*/
public class DomParseXml {
/**
* 功能描述: 通过dom技术解析XML文件 xml文件格式如下: <?xml version="1.0" encoding="utf-8"?>
* <persons> <person id="1001"> <name>张三</name> <age>22</age> <sex>男</sex>
* </person> </persons>
*
* @param ins
* xml文件输入流
* @return 返回值:xml文件中数据集合
* @throws Exception
*/
public static List<Person> getPersonList(InputStream ins) throws Exception {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(ins);
Element root = doc.getDocumentElement();
NodeList personNode = root.getElementsByTagName("person");
for (int i = 0; i < personNode.getLength(); i++) {
Element personEle = (Element) personNode.item(i);
int id = new Integer(personEle.getAttribute("id"));
Person person = new Person();
person.setId(id);
NodeList childNode = personEle.getChildNodes();
for (int j = 0; j < childNode.getLength(); j++) {
if (childNode.item(j).getNodeType() == Node.ELEMENT_NODE) {
if ("name".equals(childNode.item(j).getNodeName())) {
person.setName(childNode.item(j).getFirstChild()
.getNodeValue());
} else if ("age".equals(childNode.item(j).getNodeName())) {
person.setAge(new Integer(childNode.item(j)
.getFirstChild().getNodeValue()));
} else if ("sex".equals(childNode.item(j).getNodeName())) {
person.setSex(childNode.item(j).getFirstChild()
.getNodeValue());
}
}
}
persons.add(person);
}
ins.close();
return persons;
}
}
分享到:
相关推荐
Android 中利用SAX ,Dom,pull解析 XML 文件代码 每种方式都介绍了代码,具体的文档在个人博客: http://blog.csdn.net/blueskydyliu/article/details/7055311 中介绍了。
读取和解析xml文件
利用SAX、DOM和Pull实现对schools.xml的解析,并进行单元测试 利用Pull实现schools.xml的创建
使用环境eclipse4.8,jdk1.8 使用sax,pull,dom4j解析XML,对xml的简单解析,sax,pull,dom4j的简单使用
pull,sax,dom,解析XML的例子:各一个
提供了android中使用dom、pull、sax三种方式进行xml解析,xml文件放置在assets文件夹下,view绑定使用butterknife
详细的介绍了Android三种解析XML的方法。
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
Android XML解析 SAX DOM Pull 以person类为例进行解析,适合初学者学习
android 应用程序 做的 解析xml 用了三种技术 sax dom pull 三种解析xml的常用技术 另外还有一些怎么快速的让指定文件读取到xml文件中
Ø Android中,解析Xml数据的三种方式: Ø 1、DOM(org.w3c.dom) Ø “文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。 Ø 2、SAX(org.xml.sax) Ø SimpleAPI for XML,以事件的形式通知程序,对Xml进行...
android解析XML总结(SAX、Pull、Dom三种方式),代码实现
SAX、PULL、DOM解析XML
结合天气预报服务写的xml的DOM\pull\sax三种解析,分别对XML写出了三种解析办法,大家可以看看
XML在Android中是非常常见用来保存数据的文件,解析的方法也很多,如:DOM、SAX、PULL,其中PULL是Android自带的解析XML方法
三种方式解析XML 提供创建XML方法 本地三种方式解析 网络三种方式解析 一共7个 需要的下 带文件编码识别 相当强大哦
此示例介绍了xml的三种解析方式,包括SAX解析,dom解析,pull解析 并介绍了读取文件的方法,怎么写入xml文件等内容,希望对您有所帮助,谢谢。
通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一个解析速度快并且占用内存少的...
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。 SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着...