在Android应用开发里,XML常用于保存配置或接收服务器返回的数据。掌握解析与生成XML的方法,能让你更自如地处理这类需求。下面通过示例分别说明。

一、Android解析XML文件
Android推荐使用Pull解析,它轻量且易用。假设我们有如下格式的XML字符串:
<?xml version="1.0" encoding="utf-8"?>
<users>
<user>
<name>张三</name>
<age>20</age>
</user>
<user>
<name>李四</name>
<age>25</age>
</user>
</users>
使用Pull解析的示例代码
以下方法接收XML输入流,解析出用户列表:
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class XmlParseUtil {
// 解析XML输入流,返回用户姓名与年龄列表
public static List<User> parseXml(InputStream is) throws Exception {
List<User> users = new ArrayList<>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(is, "utf-8");
int eventType = parser.getEventType();
User user = null;
String tagName = "";
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
tagName = parser.getName();
if ("user".equals(tagName)) {
user = new User();
}
break;
case XmlPullParser.TEXT:
String text = parser.getText();
if ("name".equals(tagName) && user != null) {
user.name = text;
} else if ("age".equals(tagName) && user != null) {
user.age = Integer.parseInt(text);
}
break;
case XmlPullParser.END_TAG:
if ("user".equals(parser.getName()) && user != null) {
users.add(user);
user = null;
}
break;
}
eventType = parser.next();
}
return users;
}
public static class User {
public String name;
public int age;
}
}
二、Android生成XML文件
生成XML可使用XmlSerializer,它能按顺序写入节点,避免手动拼接字符串出错。
生成XML的示例代码
import org.xmlpull.v1.XmlSerializer;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.StringWriter;
import java.util.List;
public class XmlCreateUtil {
// 将用户列表转换为XML字符串
public static String createXml(List<XmlParseUtil.User> users) throws Exception {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer serializer = factory.newSerializer();
StringWriter writer = new StringWriter();
serializer.setOutput(writer);
serializer.startDocument("utf-8", true);
serializer.startTag("", "users");
for (XmlParseUtil.User u : users) {
serializer.startTag("", "user");
serializer.startTag("", "name");
serializer.text(u.name);
serializer.endTag("", "name");
serializer.startTag("", "age");
serializer.text(String.valueOf(u.age));
serializer.endTag("", "age");
serializer.endTag("", "user");
}
serializer.endTag("", "users");
serializer.endDocument();
return writer.toString();
}
}
三、小结
通过上述示例可以看到,Android解析XML优先选择Pull方式,生成XML则用XmlSerializer更稳妥。实际项目中,把解析与生成逻辑封装成工具类,就能在多处复用,提升开发效率。