Error While Parsing XML file Using Xml DOMParser : Android Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Error While Parsing XML file Using Xml DOMParser : Android without wasting too much if your time.

The question is published on by Tutorial Guruji team.

I am having XML file. Structure of the XML file is HERE :

<albumlist>
       <album value="Enrique Iglesias"><details value="1995"/>
              <imageid value="eenrique"/>
              <songs value="No Llores Por Mi">
                     <lyrics>hhhehhehhehe </lyrics>
              </songs>
              <songs value="Trapecista">
                     <lyrics>hhhehhehhehe </lyrics>
              </songs>
              <songs value="Por Amarte">
                      <lyrics>hhhehhehhehe </lyrics>
              </songs>
       </album>
</albumlist>

I want to extract lyrics for perticular song for perticuler album. For that i have written code which shows me songs list but for that perticuler song i am not able to extract lyrics.

Here is my function to get lyrics :

private String[] getLyrics() {
        // TODO Auto-generated method stub
        try {
            InputStream in = getResources().openRawResource(R.raw.data);
            DocumentBuilder builder = DocumentBuilderFactory.newInstance()
                    .newDocumentBuilder();
            Document doc = builder.parse(in, null);
            NodeList albumnode = doc.getElementsByTagName("album");
            for (int k = 0; k < albumnode.getLength(); k++) 
            {
                if (((Element) albumnode.item(k)).getAttribute("value").equals(albumname))
                {
                    NodeList nd = albumnode.item(k).getChildNodes();

                    for (int j = 0; j < nd.getLength(); j++) {

                        Node subNode = nd.item(j);
                        if (subNode.getNodeName().equals("songs")) {
                            if (subNode.hasAttributes()) {
                                NamedNodeMap nnm = subNode.getAttributes();

                                for (int i = 0; i < nnm.getLength(); i++) {
                                    Node attrNode = nnm.item(i);

                                    if (attrNode.getNodeType() == Node.ATTRIBUTE_NODE) {
                                        Attr attribute = (Attr) attrNode;
                                        String value = attribute.getValue();
                                        if (value.equals(songname)) {
                                            NodeList lyricslist = subNode
                                                    .getChildNodes();
                                            for(int m=0 ; m<lyricslist.getLength();m++)
                                            {
                                                Node lyricsnode = lyricslist.item(m);
                                                if (lyricsnode.getNodeType() == Node.TEXT_NODE) {
                                                    //Attr attribute = (Attr) attrNode;
                                                    String value1 = lyricsnode.getNodeValue();
                                                    Lyrics[0]=value1;
                                                    Toast.makeText(getApplicationContext(), ""+value1, Toast.LENGTH_LONG).show();
                                                }
                                            }


                                        }
                                    }
                                }
                            }
                        }
                    }

                }
            }
            in.close();
        }

        catch (Exception t) {
            Toast.makeText(this, "Exception: " + t.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        return Lyrics;
    }

So what is the mistake in my code. I spent my whole day to solve it. But unfortunately i am not able to identify my mistake. Pleaze solve my issue. Thanx.

Answer

Use this link for SAX parser

And also see the difference b/w sax and dom diffrence

Just use this parser to parse your xml

public class EmployeeParser extends DefaultHandler {

    private StringBuilder responseTag;
    private List<Album> listAblum = new ArrayList<Album>();
    private Album album;

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();

        listAblum.clear();
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();

    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);

        responseTag = new StringBuilder();
        if (localName.equals("album")) {
            album = new Album();
            album.setAlbumValue(attributes.getValue("value"));
        } else if ("imageid".equals(localName)) {
            album.setDetails(attributes.getValue("value"));
        } else if ("songs".equals(localName)) {
            album.setSongs(attributes.getValue("value"));
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        super.endElement(uri, localName, qName);

        if (localName.equals("album")) {
            listAblum.add(album);
        } else if ("lyrics".equals(localName)) {
            album.setLyrics(responseTag.toString());
        }

    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        super.characters(ch, start, length);
        String str = new String(ch, start, length);
        responseTag.append(str);
    }

    class Album {
        private String songs, imageId, lyrics, albumValue, details;

        public String getSongs() {
            return songs;
        }

        public void setSongs(String songs) {
            this.songs = songs;
        }

        public String getImageId() {
            return imageId;
        }

        public void setImageId(String imageId) {
            this.imageId = imageId;
        }

        public String getLyrics() {
            return lyrics;
        }

        public void setLyrics(String lyrics) {
            this.lyrics = lyrics;
        }

        public String getAlbumValue() {
            return albumValue;
        }

        public void setAlbumValue(String albumValue) {
            this.albumValue = albumValue;
        }

        public String getDetails() {
            return details;
        }

        public void setDetails(String details) {
            this.details = details;
        }
    }
}
We are here to answer your question about Error While Parsing XML file Using Xml DOMParser : Android - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji