Confusion with parsing XML file in Java Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Confusion with parsing XML file in Java without wasting too much if your time.

The question is published on by Tutorial Guruji team.

Given this XML file:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <data>
      <track clipid="1">
         <url>http://www.emp3world.com/to_download.php?id=33254</url>
         <http_method>GET or POST</http_method>
         <post_body>a=1&b=2&c=3</post_body>
      </track>
   </data>
</root>

What I am after is to print something like this from this XML file:

ID: 1
URL: http://www.emp3world.com/to_download.php?id=33254
Http method: GET or POST

At the moment this is my primitive handler code:

class MyHandler extends DefaultHandler
{
    String str = "";
    StringBuilder s = new StringBuilder();
    public void startElement(String namespaceURI, String sName, String qName, Attributes atts)
    {
        if(qName.equals("track"))
        {
            s.append("ID: ").append(atts.getValue("clipid")).append("n");
        }
        if(qName.equals("url"))
        {
            s.append("URL: ");
        }
        if(qName.equals("http_method"))
        {
            s.append("Http method: ");
        }
    }

    public void endElement(String uri, String localName, String qName)
    {
        if(qName.equals("url"))
        {
            s.append(str).append("n");
            str = "";
        }
        if(qName.equals("http_method"))
        {
            s.append(str).append("n");
            str = "";
        }
        System.out.println(s);
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        str = new String(ch, start, length);
    }
}

My problem is that it always prints the results 4 times(first time without the Http Method field. I guess this is a problem for all Sax Parsers beginners.
I know what startElement, endElement, characters functions do, but as you can see, I don’t know how to use them correctly. What should I change in my code so I can have the correct output?

Answer

The problem is your characters method. Change its body to

s.append(new String(ch, start, length));

then add this line to the start of startElement

s.setLength(0);

and you should see some output.

Here’s what the Java tutorial on SAX has to say about the characters method:

Parsers are not required to return any particular number of characters at one time. A parser can return anything from a single character at a time up to several thousand and still be a standard-conforming implementation. So if your application needs to process the characters it sees, it is wise to have the characters() method accumulate the characters in a java.lang.StringBuffer and operate on them only when you are sure that all of them have been found.

We are here to answer your question about Confusion with parsing XML file in Java - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji