您的位置 首页 元件

Android中XML解析-PULL解析

前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件。 P

前面写了两篇XML解析的Dom和SAX办法,Dom比较契合思想办法,SAX事情驱动重视功率,除了这两种办法以外也能够运用Android内置的Pull解析器解析XML文件。 Pull解析器的运转办法与 SAX 解析器类似,也是事情触发的。Pull解析办法让应用程序彻底操控文档该怎么样被解析,比方开端和完毕元素事情,运用parser.next()能够进入下一个元素并触发相应事情。经过Parser.getEventType()办法来取得事情的代码值,解析是在开端时就完成了大部分处理。事情将作为数值代码被发送,因而能够运用一个switch对感兴趣的事情进行处理,只过PULL办法读xml回调办法回来的是数字。

Pull创立XML

创立XML先实例化一个序列化目标,之后的经过Tag进行操作:

public void createXML() {

// 初始化一个序列化目标

XmlSerializer serializer = Xml.newSerializer();

File path = new File(getFilesDir(), BookTest.xml);

try {

FileOutputStream foStream = new FileOutputStream(path);

serializer.setOutput(foStream, utf-8);

//设置文档

serializer.startDocument(utf-8, true);

//设置根节点

serializer.startTag(null, Books);

for (int i = 1; i 4; i++) {

//设置子节点

serializer.startTag(null, Book);

serializer.attribute(null, name, 书本 + i);

serializer.startTag(null, Title);

serializer.text(内容 + i);

serializer.endTag(null, Title);

serializer.endTag(null, Book);

}

serializer.endTag(null, Books);

serializer.endDocument();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

生成的XML的成果:

Pull读取XML

展现内容调用getListBooksByPull办法:

public List getListBooksByPull() {

list = new ArrayList();

File path = new File(getFilesDir(), BookTest.xml);

try {

FileInputStream inputStream = new FileInputStream(path);

// 取得pull解析器目标

XmlPullParser parser = Xml.newPullParser();

// 指定解析的文件和编码格局

parser.setInput(inputStream, utf-8);

int eventType = parser.getEventType(); // 取得事情类型

Book book = null;

while (eventType != XmlPullParser.END_DOCUMENT) {

String tagNameString = parser.getName();

switch (eventType) {

case XmlPullParser.START_TAG:

if (Book.equals(tagNameString)) {//Book标签

book = new Book();

book.setName(parser.getAttributeValue(null, name));

} else if (Title.equals(tagNameString)) {//Title标签

book.setTitle(parser.nextText());

}

break;

case XmlPullParser.END_TAG:

if (Book.equals(tagNameString)) {

list.add(book);

}

break;

default:

break;

}

eventType = parser.next();//从头赋值,否则会死循环

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

相对于Dom和SAX来说,Pull比较简略易读,不过简略的总结一下常用的几个办法:读取到xml的声明回来 START_DOCUMENT; 读取到xml的完毕回来 END_DOCUMENT ; 读取到xml的开端标签回来 START_TAG ,读取到xml的完毕标签回来 END_TAG 读取到xml的文本回来 TEXT .

Activity加载时分调用:

ListView listView = (ListView) findViewById(R.id.list_pull);

ArrayList

list = getListBooksByPull();

for (Book book : list) {

HashMap

map.put(itemTitle, book.getName());

map.put(itemText, book.getTitle());

arrayList.add(map);

}

SimpleAdapter simpleAdapter = new SimpleAdapter(this, arrayList,

R.layout.book, new String[] { itemTitle, itemText },

new int[] { R.id.itemTitle, R.id.itemText });

listView.setAdapter(simpleAdapter);

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/300340.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部