Android 시스템에서 XML 파일 분석 방법

6565 단어 AndroidXML
앞말
Android의 Framework 레이어 원본을 학습할 때 Android는 XmlPullParser를 대량으로 사용하여 xml 파일의 원본을 해석합니다.따라서 여기서도 XmlPullParser의 사용을 소개합니다.
XML
XML(eXtensible Markup Language)의 중국어 이름은 확장 가능한 태그 언어입니다.표기는 컴퓨터가 이해할 수 있는 정보 기호를 가리키며, 이 표기를 통해 컴퓨터 간에 각종 정보를 포함하는 문장 등을 처리할 수 있다.
용도
XML 디자인은 데이터 정보를 전송하고 휴대하는데 표현이나 전시 데이터를 사용하지 않고 HTML 언어는 표현 데이터를 사용하기 때문에 XML의 용도의 초점은 데이터가 무엇인지 설명하고 데이터 정보를 휴대하는 것이다.
  • 풍부한 파일 - 자체 문서로 묘사하고 더욱 풍부하게 한다
  • 메타데이터 - 다른 파일이나 네트워크 정보를 설명합니다
  • 설정 문서 - 소프트웨어 설정의 매개 변수를 설명합니다
  • 구조
    각 XML 문서는 XML 서문으로 시작하며 앞의 코드에서 첫 번째 줄은 XML 서문입니다. .이 행 코드는 해석기나 브라우저에서 이 파일이 XML 규칙에 따라 해석되어야 한다는 것을 알려 줍니다.그러나 루트 요소의 이름은 문서 유형 정의 또는 XML 개요에 의해 정의됩니다.
    XmlPullParser
    PULL 해석 xml은 이벤트 구동 방식을 바탕으로 XML 파일을 해석하는 것입니다.pull이 해석을 시작할 때 geteventType () 방법으로 현재 해석 이벤트 형식을 가져오고next () 방법으로 다음 해석 이벤트 형식을 가져올 수 있습니다.PULL 해상도는 START_DOCUMENT(시작 문서), END_DOCUMENT(문서 종료), START_TAG(시작 레이블), END_TAG(종료 레이블) 네 가지 이벤트 확인 유형입니다.어떤 요소에 있을 때, getAttributeValue () 방법으로 속성의 값을 가져오거나,nextText () 방법으로 이 노드의 텍스트 값을 가져올 수 있습니다.다음은 하나의 예를 통해 해석한다.
    xml 예시 파일
    분석이 필요한 xml 예제 파일 코드는 다음과 같습니다.
    
      <?xml version="1.0" encoding="UTF-8"?> 
      <colleagues> 
        <colleague id="1"> 
          <name> </name> 
          <age>24</age> 
          <sex>boy</sex> 
        </colleague> 
        <colleague id="2"> 
          <name> </name> 
          <age>28</age> 
          <sex>girl</sex> 
        </colleague> 
        <colleague id="3"> 
          <name> </name> 
          <age>26</age> 
          <sex>boy</sex> 
        </colleague> 
      </colleagues> 
    
    
    XmlPullParser 해상도
    
      package com.example.shakedemo; 
       
      import java.io.File; 
      import java.io.FileNotFoundException; 
      import java.io.FileReader; 
      import java.io.IOException; 
      import java.util.ArrayList; 
      import java.util.List; 
      import org.xmlpull.v1.XmlPullParser; 
      import org.xmlpull.v1.XmlPullParserException; 
      import org.xmlpull.v1.XmlPullParserFactory; 
      import android.R.xml; 
      import android.util.Log; 
      import android.util.Xml; 
       
      public class XmlPullParserHelper { 
       
        public static List<Colleague> getColleagues(String xmlFilePath) { 
          List<Colleague> colleagues = new ArrayList<Colleague>(); 
          FileReader xmlReader = null; 
          try { 
            xmlReader = new FileReader(new File(xmlFilePath)); 
          } catch (FileNotFoundException e) { 
            Log.e("wzy", "Couldn't find xml file " + xmlFilePath); 
            return colleagues; 
          } 
       
          try { 
       
            //  1:   Android  android.util.Xml   parser   
            XmlPullParser parser = Xml.newPullParser(); 
       
            //  2:   XmlPullParserFactory 
            // XmlPullParserFactory pullFactory = 
            // XmlPullParserFactory.newInstance(); 
            // XmlPullParser parser = pullFactory.newPullParser(); 
       
            //   
            parser.setInput(xmlReader); 
       
            //   
            int eventType = parser.getEventType(); 
       
            Colleague colleague = null; 
       
            while (eventType != XmlPullParser.END_DOCUMENT) { 
              switch (eventType) { 
              case XmlPullParser.START_DOCUMENT: 
                break; 
              case XmlPullParser.START_TAG: 
                /** 
                 *  getName ,  nextText , 
                 *  getAttributeValue(i)  
                 */ 
                String name = parser.getName(); 
                if ("colleague".equals(name)) { 
                  colleague = new Colleague(); 
                  colleague.setId(Integer.parseInt(parser.getAttributeValue(null, "id"))); 
                } else if ("name".equals(name)) { 
                  if (colleague != null) { 
                    colleague.setName(parser.nextText()); 
                  } 
                } else if ("age".equals(name)) { 
                  if (colleague != null) { 
                    colleague.setAge(Integer.parseInt(parser.nextText())); 
                  } 
                } else if ("sex".equals(name)) { 
                  if (colleague != null) { 
                    colleague.setSex(parser.nextText()); 
                  } 
                } 
       
                break; 
              case XmlPullParser.END_TAG: 
                if ("colleague".equals(parser.getName()) && colleague != null) { 
                  colleagues.add(colleague); 
                  colleague = null; 
                } 
                break; 
              } 
       
              eventType = parser.next(); 
            } 
       
            xmlReader.close(); 
          } catch (XmlPullParserException e) { 
            // Do nothing 
          } catch (IOException e) { 
            // Do nothing 
          } 
       
          return colleagues; 
        } 
      } 
    
    
    그 중에서 colleague 클래스의 정의는 비교적 간단하다. 코드는 다음과 같다.
      
    
     package com.example.shakedemo; 
       
      public class Colleague { 
        private int id; 
        private int age; 
        private String name; 
        private String sex; 
       
        public int getId() { 
          return id; 
        } 
       
        public void setId(int id) { 
          this.id = id; 
        } 
       
        public int getAge() { 
          return age; 
        } 
       
        public void setAge(int age) { 
          this.age = age; 
        } 
       
        public String getName() { 
          return name; 
        } 
       
        public void setName(String name) { 
          this.name = name; 
        } 
       
        public String getSex() { 
          return sex; 
        } 
       
        public void setSex(String sex) { 
          this.sex = sex; 
        } 
       
        @Override 
        public String toString() { 
          return "ID is " + id + ", Name is " + name + ", Sex is " + sex; 
        } 
       
      } 
    

    좋은 웹페이지 즐겨찾기