Usando o SAXparser para obter informações sobre mais de um elemento (Android)

Sou novo no Android (e também em Java), mas agora estou começando a trabalhar com serviços da Web.

ara entender melhor como analisar um XML, comecei a experimentar este tutorial:

http: //www.anddev.org/novice-tutorials-f8/parsing-xml-from-the-net-using-the-saxparser-t353.htm

Com o XML usado neste exemplo:

<outertag>
<innertag sampleattribute="innertagAttribute">
<mytag>anddev.org rulez =)</mytag>
<tagwithnumber thenumber="1337"/>
</innertag>
</outertag>

Eu entendo como funciona (eu acho), mas se o XML é assim:

<outertag>
<innertag sampleattribute="innertagAttribute">
<mytag>anddev.org rulez =)</mytag>
<tagwithnumber thenumber="1337"/>
</innertag>
<innertag sampleattribute="innertagAttribute2">
<mytag>something</mytag>
<tagwithnumber thenumber="14214"/>
</innertag>
</outertag>

que precisa ser alterado nas classes do aplicativo para obter os dados dos vários elemento

Agradeço qualquer sugestão ...

Código fonte completo:

ParseXML.java

package org.anddev.android.parsingxml;

import java.net.URL;

import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource; import org.xml.sax.XMLReader;

import android.app.Activity; importar android.os.Bundle; importar android.util.Log; import android.widget.TextView;

public class ParsingXML estende a atividade

private final String MY_DEBUG_TAG = "WeatherForcaster";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    /* Create a new TextView to display the parsingresult later. */
    TextView tv = new TextView(this);
    try {
        /* Create a URL we want to load some xml-data from. */
        URL url = new URL("http://www.anddev.org/images/tut/basic/parsingxml/example.xml");

        /* Get a SAXParser from the SAXPArserFactory. */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();

        /* Get the XMLReader of the SAXParser we created. */
        XMLReader xr = sp.getXMLReader();
        /* Create a new ContentHandler and apply it to the XML-Reader*/ 
        ExampleHandler myExampleHandler = new ExampleHandler();
        xr.setContentHandler(myExampleHandler);

        /* Parse the xml-data from our URL. */
        xr.parse(new InputSource(url.openStream()));
        /* Parsing has finished. */

        /* Our ExampleHandler now provides the parsed data to us. */
        ParsedExampleDataSet parsedExampleDataSet = 
                                myExampleHandler.getParsedData();

        /* Set the result to be displayed in our GUI. */
        tv.setText(parsedExampleDataSet.toString());

    } catch (Exception e) {
        /* Display any Error to the GUI. */
        tv.setText("Error: " + e.getMessage());
        Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);
    }
    /* Display the TextView. */
    this.setContentView(tv);
}

}

ExampleHandler

package org.anddev.android.parsingxml;

import org.xml.sax.Attributes; importar org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;

public class ExampleHandler estende DefaultHandler

// ===========================================================
// Fields
// ===========================================================

private boolean in_outertag = false;
private boolean in_innertag = false;
private boolean in_mytag = false;

private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();

// ===========================================================
// Getter & Setter
// ===========================================================

public ParsedExampleDataSet getParsedData() {
    return this.myParsedExampleDataSet;
}

// ===========================================================
// Methods
// ===========================================================
@Override
public void startDocument() throws SAXException {
    this.myParsedExampleDataSet = new ParsedExampleDataSet();
}

@Override
public void endDocument() throws SAXException {
    // Nothing to do
}

/** Gets be called on opening tags like: 
 * <tag> 
 * Can provide attribute(s), when xml was like:
 * <tag attribute="attributeValue">*/
@Override
public void startElement(String namespaceURI, String localName,
        String qName, Attributes atts) throws SAXException {
    if (localName.equals("outertag")) {
        this.in_outertag = true;
    }else if (localName.equals("innertag")) {
        this.in_innertag = true;
    }else if (localName.equals("mytag")) {
        this.in_mytag = true;
    }else if (localName.equals("tagwithnumber")) {
        // Extract an Attribute
        String attrValue = atts.getValue("thenumber");
        int i = Integer.parseInt(attrValue);
        myParsedExampleDataSet.setExtractedInt(i);
    }
}

/** Gets be called on closing tags like: 
 * </tag> */
@Override
public void endElement(String namespaceURI, String localName, String qName)
        throws SAXException {
    if (localName.equals("outertag")) {
        this.in_outertag = false;
    }else if (localName.equals("innertag")) {
        this.in_innertag = false;
    }else if (localName.equals("mytag")) {
        this.in_mytag = false;
    }else if (localName.equals("tagwithnumber")) {
        // Nothing to do here
    }
}

/** Gets be called on the following structure: 
 * <tag>characters</tag> */
@Override
public void characters(char ch[], int start, int length) {
    if(this.in_mytag){
        myParsedExampleDataSet.setExtractedString(new String(ch, start, length));
    }
}

}

ParsedExampleDataSet

package org.anddev.android.parsingxml;

public classe ParsedExampleDataSet {private String extractString = null; private int extractInt = 0;

public String getExtractedString() {
    return extractedString;
}
public void setExtractedString(String extractedString) {
    this.extractedString = extractedString;
}

public int getExtractedInt() {
    return extractedInt;
}
public void setExtractedInt(int extractedInt) {
    this.extractedInt = extractedInt;
}

public String toString(){
    return "ExtractedString = " + this.extractedString
            + "nExtractedInt = " + this.extractedInt;
}

}

questionAnswers(2)

yourAnswerToTheQuestion