您的位置:首页 > 移动开发 > Android开发

Android 操作XML

2013-04-01 15:15 218 查看
Android 平台是一个开源移动开发平台。它允许您访问各种移动设备的所有方面,这些移动设备从低级图形设备到手机摄像头上的硬件不一而足。由于 Android 可以实现这么丰富的功能,因此您可能想知道为何还要为 XML 伤脑筋呢。并不是因为使用 XML 是多么地有趣;而是因为它能提供一些特殊的支持。XML 经常用作 Internet
上的一种数据格式。如果您希望通过 Internet 访问数据,则数据很有可能是 XML 格式。如果您希望发送数据给 Web 服务,那么您可能也需要发送 XML。简而言之,如果您的 Android 应用程序将利用 Internet,那么您可能需要使用 XML。幸运的是,您可以采用多种方法在 Android 上使用 XML。

这里只介绍pull解析,SAX和DOM解析请参考文章最后的链接。pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件(开始元素和结束元素),但您需要使用 
(parser.next()
 提取它们。事件将作为数值代码被发送,因此您可以使用一个简单
case-switch。注意,解析并未像 SAX 解析那样监听元素的结束,而是在开始处完成了大部分处理。

待解析的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<union>
<person>
<name>David</name>
<age>23</link>
<birthday>1990-12-25</<birthday>
</person>

<person>
<name>Kobe</name>
<age>34</link>
<birthday>1978-6-25</<birthday>
</person>

<person>
<name>Jay</name>
<age>28</link>
<birthday>1984-4-25</<birthday>
</person>
</union>

示例代码

package com.xxx.xml;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

public class AndroidXmlService {
private static final String NAME = "name";
private static final String AGE = "age";
private static final String BIRTHDAY = "birthday";
private static final String PERSON = "person";
private static final String UNION = "union";

//解析xml文件
public List<Person> parse(InputStream in){
List<Person> list = null;
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(in, "utf-8");
// auto-detect the encoding from the stream
//parser.setInput(in, null);
int eventType = parser.getEventType();
Boolean done = false;
Person person = null;
while (eventType != XmlPullParser.END_DOCUMENT && !done){
String name = null;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase(PERSON)){
person = new Person();
} else if (person != null){
if (name.equalsIgnoreCase(NAME)){
person.setName(parser.nextText());
} else if (name.equalsIgnoreCase(AGE)){
person.setAge(Integer.parseInt(parser.nextText()));
} else if (name.equalsIgnoreCase(BIRTHDAY)){
person.setBirthday(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase(PERSON) && person != null){
list.add(person);
} else if (name.equalsIgnoreCase(UNION)){
done = true;
}
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

//写出到xml文件
public String writeXml(List<Person> list){
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
try {
serializer.setOutput(writer);
//<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
serializer.startDocument("UTF-8", true);
serializer.startTag("", "union");
serializer.attribute("", "number", String.valueOf(list.size()));
for (Person person: list){
//<name>Vanuatu</name>
serializer.startTag("", NAME);
serializer.text(person.getName());
serializer.endTag("", NAME);

//<age>Vanuatu</age>
serializer.startTag("", AGE);
serializer.text(person.getAge()+"");
serializer.endTag("", AGE);

//<age>Vanuatu</age>
serializer.startTag("", BIRTHDAY);
serializer.text(person.getBirthday());
serializer.endTag("", BIRTHDAY);
}
serializer.endTag("", "union");
serializer.endDocument();
return writer.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}


详细讲解可以参考这里

https://www.ibm.com/developerworks/cn/xml/x-android/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息