Android 我认为我的XML解析器很笨重
下面是从XML文件读取数据的代码。我已经做了很长一段时间了,在最终让它工作之后,我想知道这是否是最好的方法 只要看一下代码,它就显得笨重而笨重。但它确实有效 我做错了吗 谢谢Android 我认为我的XML解析器很笨重,android,Android,下面是从XML文件读取数据的代码。我已经做了很长一段时间了,在最终让它工作之后,我想知道这是否是最好的方法 只要看一下代码,它就显得笨重而笨重。但它确实有效 我做错了吗 谢谢 public void getEncounterStats(Activity activity, int id) throws XmlPullParserException, IOException { Resources res = activity.getResources(); XmlResourceParser x
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();
}
}
我强烈建议您研究一下,通常哪一种是用于java的XMLAPI。在Android中工作得很好。我自己也试过,所以他们网站上的例子对你来说,把它和你拥有的东西整合起来应该不会有什么问题。它使整个事情自动进行。。您只需要将xml中表示的每个对象设置为类并设置其属性 最后,您将把每个实体作为一个类来处理,并使用它们的方法来访问其中的任何var
祝你好运。Switch语句始终是if…elseif块的一个很好的替代方法。除了将if…else块转换成一个开关之外,它对我来说很好。我想我担心的是,我查找数据的方式很复杂。因为我首先运行XML文件并获取elementName…然后将其存储在名为elName的变量中。然后我浏览了elName…我想它只是在我口中留下了一个不好的味道,我想知道我是否完全错了。请记住,Android上的XML解析应该保持在最低限度,以避免性能问题。另一种方法是将XML文件编译成紧凑的二进制格式,以及可以以线性方式重建数据的二进制运行时解析器。这将提供比在运行时解析XML文件更高的性能。如果不是XML,为Android应用程序存储数据的最佳方式是什么?谢谢