2013年1月11日 星期五

[Android]在Android程式中存取、修改xml文件


2013/3/11更新

讀取root的值(沒有子節點,只有root帶值):
root.getElementsByTagName("root的tag值").item(0).getFirstChild().getNodeValue();



Survey:
IBM - 在 Android 上使用 XML
YSL - 在 Android 平台上解析 XML 資料並轉成 DOM
MyAndroid - 取得XML節點資料

disanji.netAndroid XML解析学习——创建XML


===========================================


這篇文章我早該在一年多(碩畢)時就秀出來了,遲遲不秀一方面還在整理資料沒整理完
現在在android開發的路上相信不久的將來還會用到這個技巧,因此貼出來討論,以後要查詢也較方便。

假設我有一份xml文件長這樣:




以文件內容來說儲存的資訊很少階層也很少,也不算是一份正規的xml(沒有schema)
但撰寫格式只要正確,都一樣撈的出資料來哪怕你是用SAX或是DOM的技術去Parse

假設有一文件路徑
File f = new File("/sdcard/123xml");

if (f.exists()) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
System.out.println(dbf.getClass().getName());

                        //利用上面的dbf去生成DocumentBuilder
                        DocumentBuilder db = dbf.newDocumentBuilder();
                        //將xml用DocumentBuilder去parse並丟到一 public Document doc;變數中
doc = db.parse(new File("/sdcard/123.xml"));//裡面應該可以直接塞個f給它就好
//然後底下就可以依照指令去parse並把parse到的資料丟到變數儲存。
                        //設定樹根並取得長度之後開始用下搜尋子節點
                        nl = doc.getElementsByTagName("right");
int len = nl.getLength();
System.out.println(len);
for (int i = 0; i < = len; i++) {
Element eltPer = (Element) nl.item(i);
Node eltread = eltPer.getElementsByTagName("read").item(0);
Node eltwrite = eltPer.getElementsByTagName("write").item(0);
Node eltcname = eltPer.getElementsByTagName("c_name").item(0);
Node eltkey = eltPer.getElementsByTagName("key-value").item(0);
                                        //底下parse出來的read跟write是String,若要變成數字記得轉型
read = eltread.getFirstChild().getNodeValue();
write = eltwrite.getFirstChild().getNodeValue();
key_value = eltkey.getFirstChild().getNodeValue();
c_name = eltcname.getFirstChild().getNodeValue();
                                       }                                  
                      }




//xml文件回寫  最後面的kread是一開始宣告"private int kread;" int的型態做完kread--之後就可以回寫了

doc.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(2).setTextContent(kread);





沒有留言:

張貼留言