android中寫XML時,需要用到XmlSerializer類
決議XML時,則需要用到XmlPullParser類
1.XmlSerializer類介紹
通過Xml.newSerializer()來獲取XmlSerializer
XmlSerializer常用方法如下所示:
void setOutput(OutputStream os, String encoding); //設定要寫入的XML的檔案位置,以及encoding編碼格式 //比如: //File file = new File(Environment.getExternalStorageDirectory(), "text.xml"); //xmlSerializer.setOutput(new fileOutputStream(file), "utf-8"); void startDocument(String encoding, Boolean standalone); //設定檔案開頭描述,比如:" <?xml version="1.0" encoding="utf-8" standalone="yes"?>" // standalone:表示該XML是否是獨立的,默認為true,如果填為false,則表示該XML被外部檔案DTD約束 startTag(String namespace, String name); //寫入開始元素標簽 endTag(String namespace, String name); //寫入結束元素標簽 attribute(String namespace, String name, String value); //往元素標簽里寫屬性(name="value"),比如<name id="123">
text(String text); //往元素里添加內容,比如: <name id="123">張三</name>
示例代碼如下:
private void writePersonXml(){ XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(openFileOutput("persons.xml", MODE_PRIVATE), "utf-8"); serializer.startDocument("utf-8", true); serializer.startTag(null,"persons"); //創建兩個成員 serializer.startTag(null,"person"); serializer.attribute(null, "id", "1"); //添加編號 serializer.startTag(null,"姓名"); serializer.text("張三"); serializer.endTag(null,"姓名"); serializer.startTag(null,"age"); serializer.text("17"); serializer.endTag(null,"age"); serializer.endTag(null,"person"); serializer.startTag(null,"person"); serializer.attribute(null, "id", "2"); //添加編號 serializer.startTag(null,"姓名"); serializer.text("李四"); serializer.endTag(null,"姓名"); serializer.startTag(null,"age"); serializer.text("19"); serializer.endTag(null,"age"); serializer.endTag(null,"person"); serializer.endTag(null,"persons"); serializer.endDocument(); //結束檔案,并將內容寫入檔案 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
運行后,生成persons.xml:

接下來,我們便通過XmlPullParser來決議persons.xml
2.XmlPullParser介紹
通過Xml. newPullParser()來獲取XmlPullParser;
XmlPullParser常用方法如下:
void setInput(InputStream inputStream, String inputEncoding); //設定要決議的檔案以及編碼 int getEventType(); //獲取當前事件型別,回傳的型別有START_DOCUMENT(檔案開頭)、START_TAG (元素開頭)、END_TAG(元素結束)、TEXT (內容)、 END_DOCUMENT(檔案結束) int next(); //獲取下個事件型別. 回傳的型別和getEventType()一樣. getName(); //獲取當前元素名 getTextCharacters(); //獲取當前內容(當getEventType ()==TEXT時通過這個來獲取元素內容) nextText(); //獲取下個內容(當getEventType ()==START_TAG時通過這個來獲取元素內容)
示例代碼如下:
private void parsePersonsXml(){ XmlPullParser pullParser = Xml.newPullParser(); try { pullParser.setInput(this.openFileInput("persons.xml"), "utf-8"); String name = null; String age = null; String id = null; int eventType = pullParser.getEventType(); while(eventType!=pullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: if("person".equals( pullParser.getName())){ id = pullParser.getAttributeValue(null, "id"); //獲取編號,并初始化內容 name =null; age = null; }else if("姓名".equals(pullParser.getName())){ name = pullParser.nextText(); //獲取姓名 }else if("age".equals(pullParser.getName())){ age = pullParser.nextText(); //獲取年齡 } break; case XmlPullParser.END_TAG: if("person".equals( pullParser.getName())){ System.out.println("person : id="+id+" 姓名="+name+" 年齡="+age); //列印資訊 } break; } eventType = pullParser.next(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
運行列印:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/39315.html
標籤:Android
