Skip to content Skip to sidebar Skip to footer

Parsing An Xml File In Android

I have this xml file: 101kurt75

Solution 1:

The parser class:

publicfinalclassSampleParser{


    finalstaticStringROOT_NODE="maths";
    finalstaticStringELEMENT_MATHAMETICIAN="mathametician";
    finalstaticStringELEMENT_ID="id";
    finalstaticStringELEMENT_NAME="name";
    finalstaticStringELEMENT_AGE="age";

    privatestaticfinal String TAG="SampleParser";

    /**
     * Intentionally commented
     */privateSampleParser() {}

    /**
     * @param response The XML string which represents the complete news data
     * @return news The complete data
     */publicstatic Maths parse(String response) {
        SAXParserFactoryspf= SAXParserFactory.newInstance();
        SAXParser sp;
        try {
            sp = spf.newSAXParser();
            XMLReaderxr= sp.getXMLReader();
            SampleDataHandlerdataHandler=newSampleDataHandler();
            xr.setContentHandler(dataHandler);
            InputSourcesource=newInputSource(newStringReader(response)); 
            xr.parse(source);
            Mathsresult= dataHandler.getData();
            return result;
        } catch (ParserConfigurationException e) {
            Log.e(TAG, "parse", e);
        } catch (SAXException e) {
            Log.e(TAG, "parse", e);
        } catch (IOException e) {
            Log.e(TAG, "parse", e);
        } 
        returnnull;
    }

    staticclassSampleDataHandlerextendsDefaultHandler {
        /**
         * 
         */privatestaticfinal String TAG="NewsDataHandler";
        /**
         * 
         */private Maths data;
        /**
         * 
         */private Mathematician tempElement;
        /**
         * 
         */privateboolean readingAge;
        /**
         * 
         */privateboolean readingName;
        /**
         * 
         */privateboolean readingID;
        /**
         * 
         */public Maths getData(){
            return data;
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.xml.sax.helpers.DefaultHandler#endDocument()
         */@OverridepublicvoidendDocument()throws SAXException {
            Log.d(TAG, "endDocument Finished parsing response");
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
         * java.lang.String, java.lang.String)
         */@OverridepublicvoidendElement(String uri, String localName, String qName)throws SAXException {
            if(qName.equalsIgnoreCase(ELEMENT_MATHAMETICIAN)){
                data.addMathematician(tempElement);
            }elseif(qName.equalsIgnoreCase(ELEMENT_ID)){
                readingID = false;
            }elseif(qName.equalsIgnoreCase(ELEMENT_NAME)){
                readingName = false;
            }elseif(qName.equalsIgnoreCase(ELEMENT_AGE)){
                readingAge = false;
            }
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.xml.sax.helpers.DefaultHandler#startDocument()
         */@OverridepublicvoidstartDocument()throws SAXException {
            data = newMaths();
            Log.d(TAG, "startDocument Started parsing response");
        }

        /*
         * (non-Javadoc)
         * 
         * @see
         * org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
         * java.lang.String, java.lang.String, org.xml.sax.Attributes)
         */@OverridepublicvoidstartElement(String uri, String localName, String qName,
                Attributes attributes)throws SAXException {
            if(qName.equalsIgnoreCase(ROOT_NODE)){
                //data.setData(new ArrayList<NewsElement>());
            }elseif(qName.equalsIgnoreCase(ELEMENT_AGE)){
                readingAge=true;                
            }elseif(qName.equalsIgnoreCase(ELEMENT_MATHAMETICIAN)){
                tempElement = newMathematician();
            }elseif(qName.equalsIgnoreCase(ELEMENT_ID)){
                readingID=true;
            }elseif(qName.equalsIgnoreCase(ELEMENT_NAME)){
                readingName=true;
            }
        }

        /*
         * (non-Javadoc)
         * 
         * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
         */@Overridepublicvoidcharacters(char[] ch, int start, int length)throws SAXException {
            Stringchars=newString(ch, start, length);    
            chars = chars.trim(); 
            if(readingID){
                try{
                    tempElement.setId(Integer.parseInt(chars));
                }catch(Exception e){
                    Log.e(TAG, "characters[Parsing ID]", e);
                    tempElement.setId(-1);
                }
            }
            elseif(readingAge){
                try{
                    tempElement.setAge(Integer.parseInt(chars));
                }catch(Exception e){
                    Log.e(TAG, "characters[Parsing Age]", e);
                    tempElement.setAge(-1);
                }
            }elseif(readingName){
                tempElement.setName(chars);
            }
        }
    }
}

The POJOs used:

publicclassMaths {

    privateArrayList<Mathematician> mathematicians;

    /**
     * @return the mathematicians
     */publicArrayList<Mathematician> getMathematicians() {
        return mathematicians;
    }

    /**
     * @param mathematicians the mathematicians to set
     */publicvoidsetMathematicians(ArrayList<Mathematician> mathematicians) {
        this.mathematicians = mathematicians;
    }

    /**
     * @param item The item to add
     */publicvoidaddMathematician(Mathematician item){
        if(null == mathematicians){
            mathematicians = newArrayList<Mathematician>();
        }
        mathematicians.add(item);
    }
}

publicclassMathematician {

    privateint id;
    private String name;
    privateint age;
    /**
     * @return the id
     */publicintgetId() {
        return id;
    }
    /**
     * @param id the id to set
     */publicvoidsetId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */publicvoidsetName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */publicintgetAge() {
        return age;
    }
    /**
     * @param age the age to set
     */publicvoidsetAge(int age) {
        this.age = age;
    }
}

I ran it and it works fine. Hope this helps.

Post a Comment for "Parsing An Xml File In Android"