處理任意的XML文件
自定義的xml文件放置在res/xml/下,可以通過R.xml.file_name來獲取一個XMLResourceParser對象。下面是xml文件的例子:
<root name="tom"> <-- 也可以是<root>,本次採用帶參數的方式作爲實驗 --> <leaf>Hello from an element test.</leaf> <leaf>Hello World !</leaf> <corners radius="13dp"/> </root> |
通過java code對xml文件進行逐層解析,代碼如下:
try{ //防止在解析過程中,因xml文件書寫或解析分析不匹配等原因造成的異常 XmlPullParser xpp = getResources().getXml(R.xml.rt_test); //獲取XML資源的對象 int eventType = xpp.next(); //相當於xpp.next(); int eventType = xpp.getEventType(),而next()直接返回類型 while(eventType != XmlPullParser.END_DOCUMENT){ //根據類型不同進行相應處理 switch(eventType){ case XmlPullParser.START_DOCUMENT: Log.d("xml","***************start****************"); break; case XmlPullParser.START_TAG: int count = xpp.getAttributeCount(); Log.d("xml","start tap: " + xpp.getName() + " attribute number " + count); for(int i = 0 ; i < count ; i ++){ //此處處理<xxxx yy=zz ….>中yy=zz的參數部分,要注意xml是允許這樣編寫,除非確定自定義的XML的schema中不純正此方式 Log.d("xml"," Attribute " + i + " : " + xpp.getAttributeName(i) + " = " + xpp.getAttributeValue(i)); } break; case XmlPullParser.END_TAG: Log.d("xml","end tap: " + xpp.getName()); break; case XmlPullParser.TEXT: Log.d("xml"," text: " + xpp.getText()); break; default: Log.d("xml","eventType = " + eventType); break; |