Parsing An Xml File In Android
I have this xml file: 101 kurt 75
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"