Android Xml解析文档格式.docx
《Android Xml解析文档格式.docx》由会员分享,可在线阅读,更多相关《Android Xml解析文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
org.apache.xerces.parsers.SAXParser"
);
(3)使用javax.xml.parsers包中的SAXParserFactory类和SAXParser类创建:
SAXParserFactoryspFactory=SAXParserFactory.newInstance();
SAXParsersParser=spFactory.newSAXParser();
2)DOM:
(DocumentObjectModel)文档对象模型,它是基于对象的,又或者基于树的。
它属于两次加载,首先把文档载入内存,第二次把文档解析形成一棵树。
如果文档过大对内存占用是很大的。
但它也有其优点,它可以解析的过程中修改文件树,可以随便存储文件树的任意部分,相对容易理解。
3)Pull解析:
android中内置了pull解析包。
这也是android程序中所推荐的xml解析方式。
从它的字面上就可以看出来,其优点,pull,拉的意思。
我要什么资源我就拿什么资源。
我只需要xml文件中一部分,我就拉一部分。
从而节省资源,提高效率。
当然在J2EE中也可以使用Pull解析。
Pull解析也非常易于理解。
先上图:
我们就用这三种方式对同一个XML文件进行解析:
Xml代码
1.<
?
xmlversion="
1.0"
>
2.<
persons>
3.<
personid="
1"
4.<
name>
tom<
/name>
5.<
age>
13<
/age>
6.<
/person>
7.<
2"
8.<
jerry<
9.<
14<
10.<
11.<
3"
12.<
john<
13.<
34<
14.<
15.<
/persons>
SAX解析代码:
Java代码
1.packagecom.iteye.androidtoast.resolver;
2.
3.
4.importjava.io.InputStream;
5.importjava.util.ArrayList;
6.importjava.util.List;
7.
8.importjavax.xml.parsers.SAXParser;
9.importjavax.xml.parsers.SAXParserFactory;
10.
11.importorg.xml.sax.Attributes;
12.importorg.xml.sax.SAXException;
13.importorg.xml.sax.helpers.DefaultHandler;
14.
15.importandroid.util.Log;
16.
17.importcom.iteye.androidtaost.model.Person;
18.importcom.iteye.androidtaost.service.ParseService;
19.
20.publicclassSaximplementsParseService{
21./*SAX解析,是基于事件的,一次性加载*/
22.privateSAXParserparser;
23.
24.publicSax(){
25.//实例化解析工厂
26.SAXParserFactoryf=SAXParserFactory.newInstance();
27.try{
28.parser=f.newSAXParser();
29.}catch(Exceptione){
30.e.printStackTrace();
31.Log.i("
Sax"
e.getMessage());
32.}
33.}
34.@Override
35.publicList<
Person>
doParse(InputStreamin){
36.XmlHandlerh=newXmlHandler();
37.try{
38.parser.parse(in,h);
39.}catch(Exceptione){
40.//TODOAuto-generatedcatchblock
41.e.printStackTrace();
42.}
43.returnh.getPersons();
44.}
45.
46./*
47.*处理器
48.*/
49.classXmlHandlerextendsDefaultHandler{
50.List<
persons=null;
51.privatePersonp;
52.privateObjectcurrentEleName;
53.
54.
55./**
56.*开始解析文档的时候实例化集合
57.*/
58.@Override
59.publicvoidstartDocument()throwsSAXException{
60.persons=newArrayList<
();
61.}
62.
63.@Override
64.publicvoidendDocument()throwsSAXException{
65.//TODOAuto-generatedmethodstub
66.super.endDocument();
67.}
68.
69./**
70.*元素开始
71.*/
72.@Override
73.publicvoidstartElement(Stringuri,StringlocalName,StringqName,
74.Attributesattributes)throwsSAXException{
75.if("
person"
.equals(localName)){
76.p=newPerson();
//节点开始的时候实例化person
77.p.id=newInteger(attributes.getValue(0));
//得到ID
78.}elseif("
name"
79.this.currentEleName="
;
80.}elseif("
age"
81.this.currentEleName="
82.}
83.
84.}
85.
86./**
87.*元素结束事件
88.*/
89.@Override
90.publicvoidendElement(Stringuri,StringlocalName,StringqName)
91.throwsSAXException{
92.//解析到文档末尾
93.if("
94.//将解析完成的对象添加到集合
95.persons.add(p);
96.}elseif("
.equals(localName)||"
97.this.currentEleName="
"
98.}
99.}
100.
101./**)
102.*用户处理字符节点
103.*/
104.@Override
105.publicvoidcharacters(char[]ch,intstart,intlength)
106.throwsSAXException{
107.Stringstr=newString(ch,start,length);
108.if("
.equals(currentEleName)){
109.p.name=str;
110.}elseif("
111.p.age=newInteger(str);
112.}
113.}
114.
115.publicList<
getPersons(){
116.returnpersons;
117.}
118.
119.}
120.
121.}
DOM解析代码:
Java代码
3.importjava.io.IOException;
8.importjavax.xml.parsers.DocumentBuilder;
9.importjavax.xml.parsers.DocumentBuilderFactor