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。