博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android开发第四天xml文件解析
阅读量:7019 次
发布时间:2019-06-28

本文共 6138 字,大约阅读时间需要 20 分钟。

1.sax方式

/** * 使用sax解析 */public class SaxParse{    /**     * sax解析器     */    private SAXParser parser;        public SaxParse(){        try {            SAXParserFactory f = SAXParserFactory.newInstance();            parser = f.newSAXParser();        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }    public List
doParse(InputStream is) { try { XmlHandler h = new XmlHandler(); parser.parse(is,h); return h.getpersons(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 处理器 */ class XmlHandler extends DefaultHandler{ List
persons = null ; Person person = null ; //当前元素名称 private String currEleName; /** * 文本节点触发该方法 */ public void characters(char[] ch, int start, int length)throws SAXException { String str = new String(ch,start,length); //name if("name".equals(currEleName)){ person.name = str ; } else if("age".equals(currEleName)){ person.age = Integer.parseInt(str); } } public void endDocument() throws SAXException { } /** * 元素结束 */ public void endElement(String uri, String localName, String qName) throws SAXException { if("person".equals(localName)){ persons.add(person); } //将当前元素置空 else if(("name".equals(currEleName)) || ("age".equals(currEleName))){ this.currEleName = "" ; } } /** * 文档开始事件 */ public void startDocument() throws SAXException { persons = new ArrayList
(); } /** * 元素开始事件 * localName:本地名 * uri:名字空间 * qName:限定名,前缀 + 本地名 */ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //实例化person对象 if("person".equals(localName)){ person = new Person(); person.id = Integer.parseInt(attributes.getValue(0)); } //name元素 else if("name".equals(localName)){ this.currEleName = "name" ; } //name元素 else if("age".equals(localName)){ this.currEleName = "age" ; } } public List
getpersons(){ return persons ; } }}

2.dom方式

/** * DOM解析 */public class DomParse{    //    private DocumentBuilder builder;        public DomParse(){        try {            DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();            this.builder = f.newDocumentBuilder();        } catch (Exception e) {            e.printStackTrace();        }    }        public List
doParse(InputStream is) { List
persons = new ArrayList
(); Person person = null ; try { Document doc = builder.parse(is); NodeList list = doc.getElementsByTagName("person"); Element ele = null ; for(int i = 0 ; i < list.getLength() ; i ++){ ele = (Element) list.item(i); person = new Person(); person.id = Integer.parseInt(ele.getAttribute("id")); person.name = getSubElementTextContent(ele,"name"); person.age = Integer.parseInt(getSubElementTextContent(ele,"age")); persons.add(person); } } catch (Exception e) { e.printStackTrace(); } return persons; } /** * 得到指定的资源中中间的文本内容 */ private String getSubElementTextContent(Element ele, String tagName) { NodeList list = ele.getElementsByTagName(tagName); Element e = (Element) list.item(0); //得到中间的文本节点 return e.getTextContent(); }}

3.pull方式

/** * pull解析,拉模式,可以手动控制下一个事件是否触发. */public class PullParse{    public List
doParse(InputStream is) { List
persons = null ; Person person = null ; try { XmlPullParser parser = Xml.newPullParser(); //设置解析数据源 parser.setInput(is, "utf-8"); //取得事件的类型 int eventType = parser.getEventType(); String eleName = null ; while(eventType != XmlPullParser.END_DOCUMENT){ switch(eventType){ //文档开始 case XmlPullParser.START_DOCUMENT: persons = new ArrayList
(); break ; //元素开始 case XmlPullParser.START_TAG: eleName = parser.getName(); if("person".equals(eleName)){ person = new Person(); person.id = Integer.parseInt(parser.getAttributeValue(0)); } else if("name".equals(eleName)){ person.name = parser.nextText(); } else if("age".equals(eleName)){ person.age = Integer.parseInt(parser.nextText()); } break ; //标记结束 case XmlPullParser.END_TAG: eleName = parser.getName(); if("person".equals(eleName)){ persons.add(person); } break ; } //手动激活下个事件的触发 eventType = parser.next(); } } catch (Exception e) { e.printStackTrace(); } return persons; }}

移动开发qq群:59516399

csdn下载链接:

转载于:https://www.cnblogs.com/nanguabing/archive/2013/01/09/2853234.html

你可能感兴趣的文章
IOS FoundationKit (NSString) 知识汇总
查看>>
SQL2005查询死锁的表和具体的语句
查看>>
动名词和不定式
查看>>
centos6.5环境Redis下载及编译安装
查看>>
python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作...
查看>>
form表单
查看>>
dirty cow exp
查看>>
Codeforces Round #468(div2)
查看>>
转:WKT、SRID、EPSG概念
查看>>
Android实践项目汇报(一)
查看>>
hadoop-eclipse插件的使用
查看>>
日常问题
查看>>
ajax只运行一次的问题
查看>>
nginx的location和rewrite
查看>>
笔试算法题(18):常数时间删除节点 & 找到仅出现一次的两个数字
查看>>
compareTo
查看>>
day040 数据库索引补充 存储过程 事务等
查看>>
indexzero/http-server-1-简介
查看>>
Javascript文件的动态下载
查看>>
Spring logger 配置
查看>>