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()を呼び出すと取得できます。