package com.example.android.recipe016;
import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
public class Recipe016 extends Activity {
private static final String TAG = "Recipe016";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// テストデータ
String xml = "<user id=\"1\" name=\"gabu\"><age>25</age></user>";
// パーサのインスタンスを取得
XmlPullParser parser = Xml.newPullParser();
try {
// パーサにXMLをセット
parser.setInput(new StringReader(xml));
// イベントタイプを初期化
int eventType = parser.getEventType();
// イベントタイプがEND_DOCUMENTになるまでループ
while(eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.START_TAG:
// アトリビュートの数を取得
int count = parser.getAttributeCount();
// アトリビュートの数だけループ
for (int i=0; i<count; i++) {
// アトリビュートの名前を取得
String name = parser.getAttributeName(i);
Log.d(TAG, "name=" + name);
// アトリビュートの値を取得
String value = parser.getAttributeValue(i);
Log.d(TAG, "value=" + value);
}
break;
case XmlPullParser.END_TAG:
break;
case XmlPullParser.TEXT:
// START_TAG -> TEXT とイベントが発生する
// 今回の例だと<age>25</age>の25の部分が現在の位置
// この状態でgetTextメソッドでテキストを取得する
Log.d(TAG, "text=" + parser.getText());
break;
default:
break;
}
// パーサを次のイベントまで進める
eventType = parser.next();
}
} catch (XmlPullParserException e) {
// when setInput()
e.printStackTrace();
} catch (IOException e) {
// when next()
e.printStackTrace();
}
}
}