Android 에서 XML 파일 을 처리 하 는 세 가지 방법

Android 에서 XML 파일 을 처리 하 는 세 가지 방법
DOM 해석
'안 드 로 이 드 클래식 프로젝트 사례 개발 실전 보전' 정리
DOM 이 분석 할 때 모든 내용 을 메모리 에 읽 습 니 다.이런 해석 방식 도 XML 의 줄 바 꿈 자 를 해석 할 것 이다.해석 할 텍스트:

<resources>
    <fruit id="1" name="apple" ><fruit id="01" name="grap">10yuanfruit>fruit>
    <fruit id="2" name="banana" >
     3yuan
    fruit>
    <fruit id="3" name="pear" />
resources>
package com.supermario.domxml;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DomXMLActivity extends Activity {
    //              
    private Button start;
    //    TextView      
    private TextView show;
    //Assets  xml    
    private String fileName="fruit.xml";
    InputStream inStream=null;
    /**          */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show=(TextView)findViewById(R.id.show);
        start=(Button)findViewById(R.id.start);

        try {
            // Assets     
            inStream = this.getAssets().open(fileName);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //       
        start.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //         
                String result="";
                //     
                result=parse(inStream);
                //         
                show.setText(result);
            }   
        });
    }
    //     
    public String parse(InputStream inStream)
    {
        String result="";
        //     DocumentBuilderFactory 
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=null;
        Document doc=null;
        try {
            //     DocumentBuilder       
            builder=dbf.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            //     
            doc=builder.parse(inStream);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Element ele=doc.getDocumentElement();
        //     “fruit”  
        NodeList nl=ele.getElementsByTagName("fruit");
        if(nl != null && nl.getLength() != 0)
        {
            for(int i=0;i//      
                result += "name:"+entry.getAttribute("name")+"-->";
                //        
                result += entry.getTextContent()+"
"
; } } return result; } }

SAX 해석
SAX 가 사용 하 는 이벤트 드라이브 는 전체 문 서 를 해석 할 필요 가 없 이 내용 순서에 따라 XML 문법 에 맞 으 면 해석 을 시작 합 니 다.해석 할 때 ConrtentHandler 에 정 의 된 방법 을 되 돌려 줍 니 다. 주요 방법 은 다음 과 같 습 니 다. 1 startDocument: 문서 가 시 작 될 때 되 돌려 줍 니 다. 보통 여기 서 미리 처리 하 는 작업 을 합 니 다.2 startElement (String uri, String localName, String qName, Attributes attributes): 시작 탭 을 만 났 을 때 3 endElement () 를 호출 합 니 다. 끝 탭 을 만 났 을 때 호출 하고 뒷수습 을 할 수 있 습 니 다.4 characters (char [] ch, int start, int length): xml 내용 을 만 났 을 때 이 방법 을 터치 합 니 다.
   
<stundets> 
    <student id="20120812115"> 
      <name>  name> 
      <speciality>    speciality> 
      <qq>843200157qq> 
    student>
    <student id="20120812116">
      <name>  name> 
      <speciality>    speciality> 
      <qq>812256156qq> 
    student> 
    <student id="20120812117">
      <name>  name> 
      <speciality>    speciality>
      <qq>812750158qq>
    student> 
stundets>
package com.supermario.saxxml;

import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  
import javax.xml.parsers.SAXParserFactory;  
import org.xml.sax.InputSource;  
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class SaxXMLActivity extends Activity {  

    //      
    private Button button;  
    //      
    private ListView listView;
    //                 
    private ArrayList list=new ArrayList();  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main); 
    button=(Button)findViewById(R.id.btn1);  
    listView=(ListView) findViewById(R.id.listView1);
    //        
    button.setOnClickListener(new ButtonListener());  
}  

class ButtonListener implements OnClickListener{  

    @Override  
    public void onClick(View v) {  
      //          students    
       List students=parserXMl();
       //        
       for (Iterator iterator = students.iterator(); iterator.hasNext();) {  
           Student student = (Student) iterator.next();  
           //           ,     list 
           list.add(String.valueOf(student.getId())+" "+student.getName()+" "+student.getSpeciality()+" "+String.valueOf((student.getQQ())));  
    }  
       //       daapter   listview    
       ArrayAdapter adapter=new ArrayAdapter(SaxXMLActivity.this, android.R.layout.simple_list_item_1, list);  
      // listview     
       listView.setAdapter(adapter);  
    }  


}  
  //  xml  
private List parserXMl()  
{  
    //     SAX    
    SAXParserFactory factory=SAXParserFactory.newInstance();  
    Liststudents=null;   
    try {
    //  xml   
    XMLReader reader=factory.newSAXParser().getXMLReader();  
    students=new ArrayList();  
    reader.setContentHandler(new StudentHandler(students));  
    //  Assets  student.xml  
    reader.parse(new InputSource(SaxXMLActivity.this.getResources().getAssets().open("student.xml"))); //parse()      InputSource   
    } catch (Exception e) {  
    // TODO: handle exception   
    }
    return students;  
}  
}  
package com.supermario.saxxml;

import java.util.List;   
import org.xml.sax.Attributes;  
import org.xml.sax.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
import android.util.Log;

public class StudentHandler extends DefaultHandler {  
    private String preTAG;    //    xml     
    private List ListStudent;  
    private Student stu;  
    //       
    public StudentHandler() {  
        super();  
    }
    //       
    public StudentHandler(List listStudent) {  
        super();  
        ListStudent = listStudent;  
    }
    //      
    public void startDocument() throws SAXException {  
        // TODO Auto-generated method stub   
    Log.i("------>", "    ");  
        super.startDocument();  
    }
    //         
    public void startElement(String uri, String localName, String qName,  
            Attributes attributes) throws SAXException {  
        Log.i("localName-------->", localName);  
        preTAG=localName;  //           preTAG
        if ("student".equals(localName)) {  
            stu=new Student();  //     student 
            // ID     stu 
            stu.setId(Long.parseLong(attributes.getValue(0)));  

        for (int i = 0; i < attributes.getLength(); i++) {    
            Log.i("attributes-------->",String.valueOf(stu.getId()));  
            }  
        }  
        //        
        super.startElement(uri, localName, qName, attributes);  
    }  

    public void endDocument() throws SAXException {  

        Log.i("------>", "    ");  
        super.endDocument();  
    }  
    public void endElement(String uri, String localName, String qName)  
            throws SAXException {  
        preTAG="";  
        if ("student".equals(localName)) {  
        ListStudent.add(stu);  
        Log.i("-------->", "        ");  
        }  
        super.endElement(uri, localName, qName);  
    }     
    //        
    public void characters(char[] ch, int start, int length)  
        throws SAXException {  

        String str; 
        //      “name”  
       if ("name".equals(preTAG)) {  
           str=new String(ch,start,length);  
            stu.setName(str);  
            Log.i("name=", stu.getName());  
        //      “speciality”  
        }else if ("speciality".equals(preTAG)) {  
            str=new String(ch,start,length);  
            stu.setSpeciality(str);  
            Log.i("speciality=", stu.getSpeciality());
        //      “qq”  
        }else if ("qq".equals(preTAG)) {  
            str=new String(ch,start,length);  
            stu.setQQ(Long.parseLong((str)));  
            Log.i("QQ=", String.valueOf(stu.getQQ()));  
        } 
        super.characters(ch, start, length);  
    }                
    public List getListStudent() {  
        return ListStudent;  
    }

    public void setListStudent(List listStudent) {  
        ListStudent = listStudent;  
    }   
}  

PULL 해석
SAX 는 전체 문 서 를 해석 해 야 합 니 다. 우리 가 특정한 문서 의 일부분 만 분석 할 때 PULL 로 해석 하 는 방식 이 더욱 적합 합 니 다.PULL 해석 은 해상도 기 에서 이 벤트 를 주동 적 으로 가 져 올 수 있 도록 합 니 다. 우 리 는 어느 시점 에 주동 적 으로 이 벤트 를 가 져 오지 않 고 해석 을 끝 낼 수 있 습 니 다.
   
<stundets>
    <student id="20120812115">
      <name>  name>
      <speciality>    speciality> 
      <qq>843200157qq> 
    student>
    <student id="20120812116">
      <name>  name> 
      <speciality>    speciality> 
      <qq>812256156qq> 
    student> 
    <student id="20120812117">
      <name>  name> 
      <speciality>    speciality>
      <qq>812750158qq>
    student> 
stundets>
package xom.supermario.pullxml;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class PullXMLActivity extends Activity {
    //      
    private Button button;  
    //      
    private ListView listView;
    //                 
    private ArrayList list=new ArrayList();  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main); 
        button=(Button)findViewById(R.id.btn1);  
        listView=(ListView) findViewById(R.id.listView1);
        //        
        button.setOnClickListener(new ButtonListener());  
    }  

    class ButtonListener implements OnClickListener{  

        @Override  
        public void onClick(View v) {  
          //          students    
           List students=parserXMl();
        //  List students=null;
           //        
           for (Iterator iterator = students.iterator(); iterator.hasNext();) {  
               Student student = (Student) iterator.next();  
               //           ,     list 
               list.add(String.valueOf(student.getId())+" "+student.getName()+" "+student.getSpeciality()+" "+String.valueOf((student.getQQ())));  
        }  
           //       daapter   listview    
           ArrayAdapter adapter=new ArrayAdapter(PullXMLActivity.this, android.R.layout.simple_list_item_1, list);  
          // listview     
           listView.setAdapter(adapter);  
        }  


    }  

      //  xml  
    private List parserXMl()  
    {
        //     List  ,     student  
        List students=null;
        //     student  ,            
        Student stu=null;
        try{
            //      student.xml
            InputStream inputstream=PullXMLActivity.this.getResources().getAssets().open("student.xml");
            //  XmlParser     
            //   :     XmlPullParserFactory
            XmlPullParserFactory pullFactory=XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser=pullFactory.newPullParser();
            //   :  Android        android.util.Xml
            //XmlPullParser xmlPullParser=Xml.newPullParser();
            //        inputstream,        “UTF-8”
            xmlPullParser.setInput(inputstream, "UTF-8");
            //      ,          
            int eventType=xmlPullParser.getEventType();
            //              
            while(eventType != XmlPullParser.END_DOCUMENT)
            {
                /*  log      
                *START_DOCUMENT:0
                *END_DOCUMENT:1
                *START_TAG:2
                *END_TAG:3
                *TEXT:4
                */
                Log.e("guojs--->event",eventType+"");
                //        
                String localName=null;
                switch(eventType)
                {
                case XmlPullParser.START_DOCUMENT:
                    //          students  ,   log
                    students=new ArrayList();
                    Log.e("guojs","start document!");
                    break;
                case XmlPullParser.START_TAG:
                {
                    localName=xmlPullParser.getName();
                    if ("student".equals(xmlPullParser.getName())) {  
                        stu=new Student();  //     student 
                        // ID     stu 
                        stu.setId(Long.parseLong(xmlPullParser.getAttributeValue(0)));  
                        Log.e("guojs",stu.getId()+"");
                    }
                    else if(stu != null)
                    {
                        //              
                        String currentData=null;
                        if("name".equals(xmlPullParser.getName()))
                        {
                            /*    nextText()   :     START_TAG,
                             *         ,           ;        END_TAG
                             *         ;        。
                             */
                            currentData=xmlPullParser.nextText();
                            //  ”name“   
                            stu.setName(currentData);
                        }
                        else if("speciality".equals(xmlPullParser.getName()))
                        {
                            currentData=xmlPullParser.nextText();
                            //      
                            stu.setSpeciality(currentData);
                        }else if("qq".equals(xmlPullParser.getName()))
                        {
                            currentData=xmlPullParser.nextText();
                            //  QQ  
                            stu.setQQ(Long.parseLong(currentData));
                        }
                    }
                }
                break;
                case XmlPullParser.END_TAG:
                {
                    localName=xmlPullParser.getName();
                    Log.e("guojs--end tag",localName);
                    if("student".equals(localName) && stu != null)
                    {
                        // stu   students     
                        students.add(stu);
                        //  stu  
                        stu = null;
                    }
                }
                break;
                default:
                    break;
                }
                //       
                eventType=xmlPullParser.next();//           ,          。
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return students;
    }  
}

좋은 웹페이지 즐겨찾기