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

时间:2012-02-10 18:50:01

标签: android

我有以下一些代码从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();

}     


}

1 个答案:

答案 0 :(得分:2)

我强烈建议您查看SimpleXML,这是一般的java XML API。在Android中运行良好。我自己尝试过,所以在他们的网站上的示例中,将它与你的速度足够快地集成在一起应该不是问题。它会自动生成整个内容..您只需要将xml中表示的每个对象设置为一个类并设置其属性。

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

祝你好运。