[Android] XmlPullParser(XML解析(パース))

| トラックバック(0) |

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()を呼び出すと、現在解析しているdepth(階層)を得ることもできますし、
getName()を呼び出すと、エレメントのname(名前)を取得できます。

例えば、以下のようなXMLを解析すると、

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

以下のような結果が得られます。

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

まとめると、

  • START/END_DOCUMENTは、最初と最後に登場し、depthは、0
  • START/END_TAGは、<></>のたびに登場し、depthは、STARTでインクリメント、ENDの後にデクリメントされる
  • nameは、<></>でのみセットされる

のような感じになります。

最後になりますが、肝心の値の取得ですが、
TEXTの値を取得するには、getText()、
属性(先の例だとtitleの値)を取得するには、getAttributeValue()を呼び出すと取得できます。

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/60

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31