Siva K
Siva K

Reputation: 4968

parsing xml file from network database in android

i am trying to parse an xml file from an URL. I found an example in the following link

http://www.anddev.org/parsing_xml_from_the_net_-_using_the_saxparser-t353.html
and tried using it in my code but it returned the values to be as null

Following is my code of parsing xml

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

    URL url = new URL("http://www.siva.com/search");

    /** Handling XML */
    SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
    SAXParser saxparser = saxparserfactory.newSAXParser();
    XMLReader xmlreader = saxparser.getXMLReader();

    /* Create a new ContentHandler and apply it to the XML-Reader*/
    ForListXMLHandler forlistmyhandler = new ForListXMLHandler();
    xmlreader.setContentHandler(forlistmyhandler);

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

    /* Our ExampleHandler now provides the parsed data to us. */
    ParsedDataSet parsedDataSet = forlistmyhandler.getParsedData();
    System.out.println(parsedDataSet.toString());
}

following is the code of MyXMLhandler

public class ForListXMLHandler extends DefaultHandler {
    private boolean in_outertag = false;
    private boolean in_innertag = false;
    private boolean in_First_name = false;
    private boolean in_Last_name = false;

    private ParsedDataSet myParsedDataSet = new ParsedDataSet();

    public ParsedDataSet getParsedData() {
        return this.myParsedDataSet;
    }

    @Override
    public void startDocument() throws SAXException {
        this.myParsedDataSet = new ParsedDataSet();
    }

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

    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
        if (localName.equals("Searchdata")) {
            this.in_outertag = true;
        } else if (localName.equals("Searchdata")) {
            this.in_innertag = true;
        } else if (localName.equals("First_name")) {
            this.in_First_name = true;
        } else if (localName.equals("Last_name")) {
            this.in_Last_name = true;
        }
    }

    /**
     * Gets be called on closing tags like:
     * */
    @Override
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        if (localName.equals("Searchdata")) {
            this.in_outertag = false;
        } else if (localName.equals("Searchdata")) {
            this.in_innertag = false;
        } else if (localName.equals("First_name")) {
            this.in_First_name = false;
        } else if (localName.equals("Last_name")) {
            // Nothing to do here
        }
    }

    /**
     * Gets be called on the following structure: characters
     */
    @Override
    public void characters(char ch[], int start, int length) {
        if (this.in_First_name) {
            myParsedDataSet.setfirstname(new String(ch, start, length));
        }
        if (this.in_Last_name) {
            myParsedDataSet.setlastname(new String(ch, start, length));
        }
    }
}

next part is of my parsed data set class

public class ParsedDataSet {
    private String First_name = null;
    private String Last_name = null;

    public String getFirstname() {
        return First_name;
    }

    public void setfirstname(String First_name) {
        this.First_name = First_name;
    }

    public String getlastname() {
        return Last_name;
    }

    public void setlastname(String Last_name) {
        this.Last_name = Last_name;
    }

    public String toString() {
        return this.First_name + "n" + this.Last_name;
    }
}

pls tell me where i am getting error

Upvotes: 0

Views: 719

Answers (1)

javanna
javanna

Reputation: 60205

The endElement method gets fired before the characters method, so your boolean variables are always set to false when the characters method gets fired. You should move some code from endElement to characters, something like this:

@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {

}

@Override
public void characters(char ch[], int start, int length) {
    if (this.in_First_name) {
        this.in_First_name = false;
        myParsedDataSet.setfirstname(new String(ch, start, length));
    }
    if (this.in_Last_name) {
       this.in_Last_name = false;
       myParsedDataSet.setlastname(new String(ch, start, length));
    }
}

You should also take a look here for a complete explanation on "Working with XML on Android".

Upvotes: 1

Related Questions