我有以下一些代码从XML文件中读取数据。我一直在研究它已经有一段时间了,在最终开始工作之后,我想知道这是否是最好的方法。
只看代码,看起来很笨重。但它确实有效。
我这样做是错的吗?
由于
public void getEncounterStats(Activity activity, int id)
throws XmlPullParserException, IOException
{
Resources res = activity.getResources();
XmlResourceParser xpp = res.getXml(R.xml.encounters);
xpp.next();
String elName = "";
//encounterID is the ID of the encounter
int encounterID = id;
//attribID is the attribute ID in the XML file
int attribID = 0;
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_DOCUMENT)
{
}
else if(eventType == XmlPullParser.START_TAG)
{
if(encounterID >= 0) {
if(xpp.getName().equalsIgnoreCase("creature")) {
System.out.println("inside while loop --- "+xpp.getName());
try {
attribID = Integer.parseInt(xpp.getAttributeValue(0));
} catch (NumberFormatException e) {
Log.e("attribute value error", e.getMessage());
}
//DETERMINE ELEMENT NAME and set elName
} else if(xpp.getName().equalsIgnoreCase("name")) {
System.out.println("inside while loop --- "+xpp.getName());
elName = "name";
} else if(xpp.getName().equalsIgnoreCase("race")) {
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("gender")) {
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("alignment")) {
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("age")) {
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("condition")){
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("item1")) {
elName = xpp.getName();
} else if(xpp.getName().equalsIgnoreCase("item2")) {
elName = xpp.getName();
}
}
} else if(eventType == XmlPullParser.END_TAG) {
//end tag
} else if(eventType == XmlPullParser.TEXT) {
//COLLECT DATA
//check to make sure the attribID == the encounterID...will only pull data from correct ID
if (attribID == encounterID) {
if(elName.equalsIgnoreCase("name")) {
setName(xpp.getText());
System.out.println("name is " + this.name);
} else if(elName.equalsIgnoreCase("race")) {
setRace(xpp.getText());
} else if(elName.equalsIgnoreCase("gender")) {
setGender(xpp.getText());
} else if(elName.equalsIgnoreCase("age")) {
try {
setAge(Integer.parseInt(xpp.getText()));
} catch (NumberFormatException e) {
Log.e("encounter.age error", e.getMessage());
}
} else if(elName.equalsIgnoreCase("alignment")) {
setAlignment(xpp.getText());
} else if(elName.equalsIgnoreCase("condition")) {
setCondition(xpp.getText());
} else if(elName.equalsIgnoreCase("item1")) {
setItem1(xpp.getText());
} else if(elName.equalsIgnoreCase("item2")) {
setItem2(xpp.getText());
} else {
System.out.println("Nothing here "+xpp.getName());
}
}
}
eventType = xpp.next();
}
}
答案 0 :(得分:2)
我强烈建议您查看SimpleXML,这是一般的java XML API。在Android中运行良好。我自己尝试过,所以在他们的网站上的示例中,将它与你的速度足够快地集成在一起应该不是问题。它会自动生成整个内容..您只需要将xml中表示的每个对象设置为一个类并设置其属性。
最后,您将每个实体作为一个类处理,并使用它们的方法访问其中的任何var。
祝你好运。