Chinaunix首页 | 论坛 | 博客
  • 博客访问: 822229
  • 博文数量: 210
  • 博客积分: 10002
  • 博客等级: 上将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 09:56
文章分类

全部博文(210)

文章存档

2011年(1)

2010年(6)

2009年(65)

2008年(138)

我的朋友

分类: LINUX

2008-11-24 15:48:46

一般來說,要擷取 XML 中的資料,有 SAX (Simple API for XML) 及 DOM (Document Object Model) 這兩種 APIs 可用。以 SAX 來說,在 Android 上,你可以使用支持 SAX API 的 SAXParserFactory 和 XMLReader。一個簡單的使用範例,就像底下這樣。

關於這個,anddev.org 的 這篇 有完整的教學範例。

如果,你的 XML 只是個字串,那你可以更簡單地用 Xml 這個 class。

熟悉 SAX 或 DOM 的人應該知道,SAX 的好處在於其記憶體使用量,一般遠低於 DOM 的使用量。因為 DOM 必須把整個 XML 樹放在記憶體,他的記憶體使用量和 XML 的大小成正比。而 SAX 所要耗費的的記憶體,卻是和 XML樹的最大深度相關。

雖然 SAX 有省記憶體的好處,不過當你的 XML 文件不是很大時,用 SAX 的方式,總是覺得要寫一堆的程式碼,而資料的處理也比較麻煩。這時,我通常會選用 DOM 。

幸運的是,在 Android 上有相對應的 DOM 處理函式。一個簡單的使用範例如下:

不過不幸的是,在這個 m5-rc15 的版本,關於 org.w3c.dom.* 相關類別的實現,倒是有不少的臭蟲。

目前 Android 中,所有 DOM 的實現類,都放在 android.xml.dom 這個 package 裡面。就拿 Element.getAttributes() 來說,他的程式碼裡,竟然是 always return null,搞的你只能用 Element.getAttribute(String name)。

另外,Node.getNextSibling() 和 Node.getPreviousSibling() 這兩個函式,也是錯誤百出。我建議你用底下的方式,來 traverse DOM 樹。

雖然目前版本中,還有不少的 bugs。不過針對小 XML 文件,只要適當地避免掉這些 bugs,用 DOM 來處理,還是最好的選擇。

阅读(2174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~