2014-08-29 5 views
0

У меня есть этот XML структуру:Как анализировать атрибуты с помощью XmlPullParser?

<markers> 
<marker provincia="Guayas" lat="-2.33" lng="-77.63" /> 
<marker provincia="Pichincha" lat="-3.23" lng="-81.13" /> 
</markers> 

, и я хочу, чтобы показать его в виде списка. Я основал в этом example, но у этого есть другая структура xml. Мне кажется, мне нужно поставить параметр getAttributeCount(), я нашел это sample, но я не очень хорошо понимаю. Можете ли вы мне помочь? Это код Modify:

package com.makemyandroidapp.example.stacksites; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserFactory; 

import android.content.Context; 

public class SitesXmlPullParser { 

    static String KEY_MARKER = "marker"; 

    public static List<StackSite> getStackSitesFromFile(Context ctx) { 
     List<StackSite> stackSites; 
     stackSites = new ArrayList<StackSite>(); 

     try { 
      // Get our factory and PullParser 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      XmlPullParser xpp = factory.newPullParser(); 

      // Open up InputStream and Reader of our file. 
      FileInputStream fis = ctx.openFileInput("StackSites.xml"); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); 

      xpp.setInput(reader); 
      int eventType = xpp.getEventType(); 

      while (eventType != XmlPullParser.END_DOCUMENT) { 

       String tagname = xpp.getName(); 

       switch (eventType) { 
       case XmlPullParser.START_TAG: 

        break; 

       case XmlPullParser.END_TAG: 
        if (tagname.equals(KEY_MARKER)) { 
         KEY_MARKER = xpp.getAttributeValue(null, "provincia"); 
         KEY_MARKER = xpp.getAttributeValue(null, "lat"); 
         KEY_MARKER = xpp.getAttributeValue(null, "lng");  
        } 
         else{ 
        } 
        break; 

       default: 
        break; 
       } 
       //move on to next iteration 
       eventType = xpp.next(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // return the populated list. 
     return stackSites; 
    } 
} 
+0

Используйте этот пример http://www.androidhive.info/2011/11/android-xml-parsing- учебник/и http://androidexample.com/XML_Parsing_-_Android_Example/index.php?view=article_discription&aid=69&aaid=94. Надеюсь, это поможет. – Soham

+0

Спасибо за ссылки, но это не то, что я точно ищу. –

ответ

0

Я нашел решение для этого:

public class SitesXmlPullParser { 
    static final String KEY_MARKERS = "markers"; 
    static final String KEY_MARKER= "marker"; 

    public static List<StackSite> getStackSitesFromFile(Context ctx) { 

     // List of StackSites that we will return 
     List<StackSite> stackSites; 
     stackSites = new ArrayList<StackSite>(); 

     // temp holder for current StackSite while parsing 
     StackSite curStackSite = null;   

     try { 
      // Get our factory and PullParser 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      XmlPullParser xpp = factory.newPullParser(); 

      // Open up InputStream and Reader of our file. 
      FileInputStream fis = ctx.openFileInput("StackSites.xml"); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); 

      // point the parser to our file. 
      xpp.setInput(reader); 

      // get initial eventType 
      int eventType = xpp.getEventType(); 

      // Loop through pull events until we reach END_DOCUMENT 
      while (eventType != XmlPullParser.END_DOCUMENT) { 
       // Get the current tag 
       String tagname = xpp.getName(); 

       // React to different event types appropriately 
       switch (eventType) { 
       case XmlPullParser.START_TAG: 
        if (tagname.equalsIgnoreCase(KEY_MARKER)) { 
         // If we are starting a new <markers> block we need 
         //a new StackSite object to represent it 
         curStackSite = new StackSite(); 
        } 
        break; 

       case XmlPullParser.END_TAG:     
        if (tagname.equals(KEY_MARKER)) {              
         String title = xpp.getAttributeValue(null, "provincia");     
         String lat = xpp.getAttributeValue(null, "lat"); 
         String lng = xpp.getAttributeValue(null, "lng");       
         curStackSite.setTitulo(title);      
         curStackSite.setLat(lat); 
         curStackSite.setLng(lng);      
         stackSites.add(curStackSite);         
        }     
        break; 
       default: 
        break;    } 
       //move on to next iteration 
       eventType = xpp.next(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     // return the populated list. 
     return stackSites; 
    } 
}