XML parsing in android.

Friday, October 12, 2012

XML is a popular format for sharing data on the internet. Websites that frequently update their content, such as news sites or blogs, often provide an XML feed so that external programs can keep abreast of content changes. Uploading and parsing XML data is a common task for network-connected apps. This lesson explains how to parse XML documents and use their data.

This is the XML parser class:

Connection.java



public class Connection {

public String getXmlFromUrl(String url) {
String xml = null;

try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// return XML
return xml;
}

public Document getDomElement(String xml){
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {

DocumentBuilder db = dbf.newDocumentBuilder();

InputSource is = new InputSource();
       is.setCharacterStream(new StringReader(xml));
       doc = db.parse(is); 

} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
           return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
                // return DOM
       return doc;
}

public String getValue(Element item, String str) {
   NodeList n = item.getElementsByTagName(str);
   return this.getElementValue(n.item(0));
}
 
public final String getElementValue( Node elem ) {
        Node child;
        if( elem != null){
            if (elem.hasChildNodes()){
                for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                    if( child.getNodeType() == Node.TEXT_NODE  ){
                        return child.getNodeValue();
                    }
                }
            }
        }
        return "";
 } 
}

This is the main class of the xml parsing which set the xml data to the listview:

XML_Parsing.java

public class XML_Parsing extends ListActivity {
    /** Called when the activity is first created. */

static final String URL = "http://..................../";               //URL for the xml data. 
   // XML node keys
    static final String KEY_ITEM = "item"; // parent node
    static final String KEY_NAME = "name";
    static final String KEY_EDUCATION = "education";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
        
        Connection parser = new Connection();
        String xml = parser.getXmlFromUrl(URL); // getting XML
        Document doc = parser.getDomElement(xml); // getting DOM element
 
        NodeList nl = doc.getElementsByTagName(KEY_ITEM);
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
            map.put(KEY_EDUCATION, parser.getValue(e, KEY_EDUCATION));
 
            // adding HashList to ArrayList
            menuItems.add(map);
        }
 
        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, menuItems,
                R.layout.row_data,
                new String[] { KEY_NAME, KEY_EDUCATION }, new int[] {
                        R.id.name, R.id.education });
 
        setListAdapter(adapter);
    }
}




0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.