android中寫XML時,須要用到XmlSerializer類android
解析XML時,則須要用到XmlPullParser類this
1.XmlSerializer類介紹編碼
經過Xml.newSerializer()來獲取XmlSerializerspa
XmlSerializer經常使用方法以下所示:3d
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>
示例代碼以下:code
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:xml
接下來,咱們便經過XmlPullParser來解析persons.xmlblog
2.XmlPullParser介紹事件
經過Xml. newPullParser()來獲取XmlPullParser;utf-8
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(); } }
運行打印: