0

I'm trying to create an app which allows me to download xml file from a page, I found some tutorials on the internet , one was simple enough for me, anyway there is a class which is parsing XML file and gives back the list of objects.

public class SiteXmlPullParser {

    static final String KEY_SITE = "site";
    static final String KEY_NAME = "name";
    static final String KEY_LINK = "link";
    static final String KEY_ABOUT = "about";
    static final String KEY_IMAGE_URL = "image";

    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;
        // temp holder for current text value while parsing
        String curText = "";

        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_SITE)) {
                            // If we are starting a new <site> block we need
                            //a new StackSite object to represent it
                            curStackSite = new StackSite();
                        }
                        break;

                    case XmlPullParser.TEXT:
                        //grab the current text so we can use it in END_TAG event
                        curText = xpp.getText();
                        break;

                    case XmlPullParser.END_TAG:
                        if (tagname.equalsIgnoreCase(KEY_SITE)) {
                            // if </site> then we are done with current Site
                            // add it to the list.
                            stackSites.add(curStackSite);
                        } else if (tagname.equalsIgnoreCase(KEY_NAME)) {
                            // if </name> use setName() on curSite
                            curStackSite.setName(curText);
                        } else if (tagname.equalsIgnoreCase(KEY_LINK)) {
                            // if </link> use setLink() on curSite
                            curStackSite.setLink(curText);
                        } else if (tagname.equalsIgnoreCase(KEY_ABOUT)) {
                            // if </about> use setAbout() on curSite
                            curStackSite.setAbout(curText);
                        } else if (tagname.equalsIgnoreCase(KEY_IMAGE_URL)) {
                            // if </image> use setImgUrl() on curSite
                            curStackSite.setImgUrl(curText);
                        }
                        break;

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

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

This XML file looks like this -> https://dl.dropboxusercontent.com/u/5724095/XmlParseExample/stacksites.xml so the structure here is fine but I don't exactly know how to fix the code to download my XML file which looks like this : http://www.nbp.pl/kursy/xml/dir.txt Can sb help me?

Piotr Szczepanik
  • 361
  • 2
  • 4
  • 17
  • 1
    `dir.txt` is not an XML file. – Andreas Oct 27 '16 at 20:44
  • To download a file, you can see this post - http://stackoverflow.com/questions/921262/how-to-download-and-save-a-file-from-internet-using-java. I am assuming you are not facing any problem in parsing the xml file. – Wasi Ahmad Oct 27 '16 at 20:45
  • i think this going help you http://stackoverflow.com/questions/17591311/parsing-xml-with-jsoup – Hamza Oct 27 '16 at 20:46
  • For XML parsing, you can use SAX parser. You can have a look here - https://www.tutorialspoint.com/java_xml/java_sax_parse_document.htm – Wasi Ahmad Oct 27 '16 at 20:47

0 Answers0