我正在使用XmlPullParser
從XML文檔中提取數據。我XML文件的結構是這樣的:使用XMLpullParser瀏覽XML文檔
<creature id="1">
<name>CreatureName</name>
<type>CreatureType</type>
<size>CreatureSize</size>
</creature>
<creature id="2">
<name>CreatureName</name>
<type>CreatureType</type>
<size>CreatureSize</size>
</creature>
<creature id="3">
<name>CreatureName</name>
<type>CreatureType</type>
<size>CreatureSize</size>
</creature>
我的代碼正在工作,如果我只有一個生物在我XML文件。
我正在尋找一種基於生物ID選擇生物的方法。例如,如果ID是2,那麼XMLPullParser
只會解析生物ID =「2」下的XML。
這裏是我到目前爲止的代碼:
xpp.next();
String elName = "";
int encounterId = 0;
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_DOCUMENT)
{
System.out.println("START_DOCUMENT "+xpp.getName());
}
else if(eventType == XmlPullParser.START_TAG)
{
if(encounterId >= 0) {
if(xpp.getName().equalsIgnoreCase("creature")) {
System.out.println("inside while loop --- "+xpp.getName());
try {
encounterId = Integer.parseInt(xpp.getAttributeValue(0));
System.out.println("attribute value = " + encounterId);
} catch (NumberFormatException e) {
Log.e("attribute value error", e.getMessage());
}
//DETERMINE ELEMENT NAME
} else if(xpp.getName().equalsIgnoreCase("name")) {
System.out.println("inside while loop --- "+xpp.getName());
elName = "name";
} else if(xpp.getName().equalsIgnoreCase("type")) {
elName = xpp.getName();
elName = "type";
} else if(xpp.getName().equalsIgnoreCase("size")) {
elName = xpp.getName();
elname = "size";
}
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
//COLLECT DATA
if(elName.equalsIgnoreCase("name")) {
this.name = xpp.getText();
} else if(elName.equalsIgnoreCase("type")) {
this.race = xpp.getText();
} else if(elName.equalsIgnoreCase("size")) {
this.gender = xpp.getText();
}
eventType = xpp.next();
}
謝謝!
不應該xpp.next)while循環中的XPath(?讀取所有元素沒有發生循環(如果我理解你的代碼是正確的)。 – kosa 2012-02-08 15:33:24
哎呀忘了粘貼在...編輯,以表明。感謝您的支持。 – SkyeBoniwell 2012-02-08 15:39:45