XmlPullParser(XML解析(パース))

XML을분석하는것은 org.xmlpull.v1패키지의 XmlPullParser클래스를 사용합니다.

 

XmlPullParser의 인스턴스를 얻는 방법은? 

android.util패키지의 XML클래스의 static메소드에 있는 newPullParser()를 호출합니다.

  final XmlPullParser xmlPullParser = Xml.newPullParser();

또는 og.xmlpull.v1패키지의 XmlPullParserFactory클래스의 static메소드에 있는 XmlPullParserfactory.newInstance()를 호출해 XmlPullParserFactory의 인스턴스를 취득한 후

같은 인스턴스의 newPullParser()를 호출합니다.

 

 final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
 final XmlPullParser xmlPullParser = factory.newPullParser();
 

XmlPullParser인스턴스의 분석하고싶은 XML을 셋트(셋팅)하는 방법은?

XmlPullParser클래스의 setInput(Reader in)、

또는 setInput(InputStream inputStream, String inputEncoding)을 호출한다.

 

예를들면, 이 클래스의 동작을 이해하기 위해서, 아래와 같이 코딩해 보는 것도 좋습니다.

(헬프와 같은 예입니다)

 xmlPullParser.setInput(new StringReader("<foo>Hello World!</foo>"));

 

XmlPullParser인스턴스에 분석을 진행하는 방법은?

XmlPullParser클래스의 next()를 호출하면 반환값에 EventType와 호출되는 아래의 정수값을 얻을 수 있습니다.

  • XmlPullParser.START_DOCUMENT
  • XmlPullParser.START_TAG
  • XmlPullParser.TEXT
  • XmlPullParser.END_TAG
  • XmlPullParser.END_DOCUMENT

또, XmlPullParser클래스의 getDepth()를 호출하면, 현재분석하고있는 계층을 얻는 것도 가능하며,

getName()을 호출하면 앨리먼트네임도 얻을 수 있습니다.

 

예를 들면, 아래와 같은 XML을 분석한다면

<lv1>
  a
  <lv2 title="test">
    b
  </lv2>
  c
</lv1>

아래와 같은 결과가 나옵니다.

depth  eventType  name  
 0  START_DOCUMENT  null  
 1  START_TAG  lv1  // <lv1>
 1      TEXT  null  //   a
 2        START_TAG  lv2  //     <lv2>
 2          TEXT  null  //       b
 2        END_TAG  lv2  //     </lv2>
 1      TEXT  null  //   c
 1    END_TAG  lv1  // </lv1>
 0  END_DOCUMENT  null  //

 

정리하면,

  • START/END_DOCUMENT는 처음과 마지막에 등록해서 depth와 0
  • START/END_TAG는 <></>일때 등록하여 、depth는、START에서 인클리먼트, END 다음에 데크리멘트됩니다.
  • name은 <></>에서 뿐만아니라 셋팅 됩니다.

마지막으로 ..

중요한값은 얻었으나, TEXT의 값을 얻기 위해서는 getText(), 속성을 얻는 방법은 getAttributeValue()를 호출하면 얻을 수 있습니다.

[출처] [Android] XML PullParser|작성자 쪼꼬

+ Recent posts