Android 我认为我的XML解析器很笨重

Android 我认为我的XML解析器很笨重,android,Android,下面是从XML文件读取数据的代码。我已经做了很长一段时间了,在最终让它工作之后,我想知道这是否是最好的方法 只要看一下代码,它就显得笨重而笨重。但它确实有效 我做错了吗 谢谢 public void getEncounterStats(Activity activity, int id) throws XmlPullParserException, IOException { Resources res = activity.getResources(); XmlResourceParser x

下面是从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();

}     


}

我强烈建议您研究一下,通常哪一种是用于java的XMLAPI。在Android中工作得很好。我自己也试过,所以他们网站上的例子对你来说,把它和你拥有的东西整合起来应该不会有什么问题。它使整个事情自动进行。。您只需要将xml中表示的每个对象设置为类并设置其属性

最后,您将把每个实体作为一个类来处理,并使用它们的方法来访问其中的任何var


祝你好运。

Switch语句始终是if…elseif块的一个很好的替代方法。除了将if…else块转换成一个开关之外,它对我来说很好。我想我担心的是,我查找数据的方式很复杂。因为我首先运行XML文件并获取elementName…然后将其存储在名为elName的变量中。然后我浏览了elName…我想它只是在我口中留下了一个不好的味道,我想知道我是否完全错了。请记住,Android上的XML解析应该保持在最低限度,以避免性能问题。另一种方法是将XML文件编译成紧凑的二进制格式,以及可以以线性方式重建数据的二进制运行时解析器。这将提供比在运行时解析XML文件更高的性能。如果不是XML,为Android应用程序存储数据的最佳方式是什么?谢谢