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

深入理解Android解析xml(二)

2014-12-29 00:21 537 查看
Android解析xml

一、前面介绍了3中方式的如何解析XML的,以及一些例子,这次我将介绍一下,如何写回XML以及3种解析的内部的详细介绍。

我们将xml文件放在asset目录下,通过
InputStream is = getAssets().open("persons.xml")//得到输入流


下面是一个Android程序完整的解析和写回代码
public class MainActivity extends Activity {

private static final String TAG = "XML";

private BookParser parser;
private List<Book> books;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button readBtn = (Button) findViewById(R.id.readBtn);
Button writeBtn = (Button) findViewById(R.id.writeBtn);

readBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
InputStream is = getAssets().open("books.xml");
parser = new SaxPersonParser();  //创建SaxBookParser实例
persons = parser.readXml(is);  //解析输入流
for (Person person : persons) {
Log.i(TAG, book.toString());
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
});
writeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
String xml = parser.serialize(persons);  //序列化
FileOutputStream fos = openFileOutput("persons.xml", Context.MODE_PRIVATE);
fos.write(xml.getBytes("UTF-8"));
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
});
}
}
写回部分代码,非常简单

String xml = parser.serialize(persons);

FileOutputStream fos = openFileOutput("books.xml",Context.MODE_PRIVATE);

fos.write(xml.getBytes("UTF-8"));

再次总结,SAX是基于事件处理的,也就是他会按顺序解析文档,如果存在匹配的事件才会触发。

而DOM 是基于文档处理的,也就是他会先将xml读到内存形成一个文档树,然后在进行判断解析出来。

其他的解析方法还有JDOM,和DOM4J。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: