Pull解析器によるxmlファイルの解析
2297 ワード
SAXとDOMでXMLファイルを解析できるほか、Android内蔵のPull解析器でXMLファイルを解析することもできます.
Pull解析器の動作はSAX解析器と似ています.開始要素と終了要素イベント、parserを使用するなど、類似のイベントを提供します.next()は、次の要素に入り、対応するイベントをトリガーできます.イベントは数値コードとして送信されるので,興味のあるイベントを1つのswitchで処理することができる.要素が解析を開始するとparserが呼び出される.nextText()メソッドは、次のTextタイプ要素の値を取得できます.
Pull解析器のソースコードとドキュメントのダウンロードサイト:http://www.xmlpull.org/
person.xmlファイル:
Pull解析でxmlファイルコードを解析します.
Pull解析器の動作はSAX解析器と似ています.開始要素と終了要素イベント、parserを使用するなど、類似のイベントを提供します.next()は、次の要素に入り、対応するイベントをトリガーできます.イベントは数値コードとして送信されるので,興味のあるイベントを1つのswitchで処理することができる.要素が解析を開始するとparserが呼び出される.nextText()メソッドは、次のTextタイプ要素の値を取得できます.
Pull解析器のソースコードとドキュメントのダウンロードサイト:http://www.xmlpull.org/
person.xmlファイル:
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person id="21">
<name>hanmeimei</name>
<age>23</age>
</person>
<person id="27">
<name>lilei</name>
<age>25</age>
</person>
</persons>
Pull解析でxmlファイルコードを解析します.
/**
* Pull xml
*/
public class PullPersonService {
public static List<Person> getPersons(InputStream inStream)
throws Exception {
List<Person> persons = null;
Person person = null;
// XmlPullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
// XmlPullParser
// XmlPullParser parser = Xml.newPullParser()
// InputStream
parser.setInput(inStream, "UTF-8");
//
int event = parser.getEventType();
// while xml ,
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(parser.getName())) {
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}
if (person != null) {
if ("name".equals(parser.getName())) {
person.setName(parser.nextText());
} else if ("age".equals(parser.getName())) {
person.setAge(new Short(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
if (person != null) {
persons.add(person);
person = null;
}
}
break;
case XmlPullParser.END_DOCUMENT:
break;
}
event = parser.next();
}
return persons;
}
}