深入理解Android解析xml(二)

                                                            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。

發佈了34 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章