分别对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();}// 定义一个内部类继承DefaultHandlerprivate final class PersonHandler extends DefaultHandler {private List<Person> persons;private Person person;private String tag;public List<Person> getPersons() {return persons;}@Overridepublic void startDocument() throws SAXException {persons = new ArrayList<Person>();}@Overridepublic 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;}@Overridepublic 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);}}}@Overridepublic 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;}}

更多相关文章

  1. 2.7-2 Android(安卓)studio gradle 文件 配置完整版
  2. Android(安卓)Studio 自带模拟器获取root权限
  3. Android第一个应用程序helloworld项目详解
  4. Android(安卓)Studio 编译系统源码
  5. Android(安卓)studio -SVN 使用笔记
  6. android透明activity
  7. Android(安卓)Studio使用Gradle构建和发布APK
  8. AndroidStudio3.5.1下搭建FFmpeg环境
  9. Andriod(三):配置文件build.gradle与AndroidManifest.xml

随机推荐

  1. Android(安卓)传感器概述
  2. android兼容oppo手机刘海屏解决方案
  3. android 工程库及引用
  4. android Activity 组件
  5. android shape 用法整理
  6. Kotlin 写 Android(安卓)单元测试(二),JUnit
  7. Android平台开发-Android(安卓)HAL devel
  8. 利用HTML5开发Android应用程序 PPT
  9. android蓝牙BLE(一) —— 扫描
  10. Android的常用基本控件ImageView、ListVi