11.Android-Xml讀寫

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();
        } 
        
 }

運行打印:

 

相關文章
相關標籤/搜索