title: How can I parse xml file from url
body: <p>I try to get currency from this url <a href="http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml" rel="nofollow">http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml</a>. But my parsing doesn't work. This is my code.</p>
  
  <p><a href="http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html" rel="nofollow">http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html</a></p>
  
  <p><strong>AndroidXMLParsingActivit.java</strong></p>
  
  <pre><code>package com.androidhive.xmlparsing;
  
      import java.util.ArrayList;
      import java.util.HashMap;
  
      import org.w3c.dom.Document;
      import org.w3c.dom.Element;
      import org.w3c.dom.NodeList;
  
      import android.app.ListActivity;
      import android.content.Intent;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.AdapterView;
      import android.widget.AdapterView.OnItemClickListener;
      import android.widget.ListAdapter;
      import android.widget.ListView;
      import android.widget.SimpleAdapter;
      import android.widget.TextView;
  
      public class AndroidXMLParsingActivity extends ListActivity {
  
          // All static variables
          //static final String URL = "http://api.androidhive.info/pizza/?format=xml";
          static final String URL = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml";
  
  
          // XML node keys
          //static final String KEY_ITEM = "item"; // parent node
          static final String KEY_ITEM = "Cube"; // parent node
  
          static final String KEY_ID = "currency";
          static final String KEY_NAME = "rate";
          /*static final String KEY_ID = "id";
          static final String KEY_NAME = "name";
          static final String KEY_COST = "cost";
          static final String KEY_DESC = "description";*/
  
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
  
              ArrayList&lt;HashMap&lt;String, String&gt;&gt; menuItems = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
              XMLParser parser = new XMLParser();
              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 &lt;item&gt;
              for (int i = 0; i &lt; nl.getLength(); i++) {
                  // creating new HashMap
                  HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
                  Element e = (Element) nl.item(i);
                  // adding each child node to HashMap key =&gt; value
                  map.put(KEY_ID, parser.getValue(e, KEY_ID));
                  map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
                  //map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST));
                  //map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
  
                  // adding HashList to ArrayList
                  menuItems.add(map);
              }
  
              // Adding menuItems to ListView
              ListAdapter adapter = new SimpleAdapter(this, menuItems,
                      R.layout.list_item,
                      //new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                      new String[] { KEY_NAME, KEY_ID, KEY_ID }, new int[] {
                              R.id.name, R.id.desciption, R.id.cost });
  
              setListAdapter(adapter);
  
              // selecting single ListView item
              ListView lv = getListView();
  
              lv.setOnItemClickListener(new OnItemClickListener() {
  
                  @Override
                  public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                          int position, long id) {
                      // getting values from selected ListItem
                      String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                      String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
                      String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();
  
                      // Starting new intent
                      Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
                      in.putExtra(KEY_ID, cost);
                      in.putExtra(KEY_NAME, name);
  
                      //in.putExtra(KEY_COST, cost);
                      //in.putExtra(KEY_DESC, description);
                      startActivity(in);
  
                  }
              });
          }
      }
  </code></pre>
  
  <p><strong>SingleMenuItemActivity.java</strong></p>
  
  <pre><code>package com.androidhive.xmlparsing;
  
  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.util.Log;
  import android.widget.TextView;
  
  public class SingleMenuItemActivity  extends Activity {
  
      // XML node keys
      static final String KEY_ID = "currency";
      static final String KEY_NAME = "rate";
  
      /*static final String KEY_NAME = "name";
      static final String KEY_COST = "cost";
      static final String KEY_DESC = "description";*/
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.single_list_item);
  
          // getting intent data
          Intent in = getIntent();
  
          // Get XML values from previous intent
          String name = in.getStringExtra(KEY_NAME);
          String cost = in.getStringExtra(KEY_ID);
          /*String cost = in.getStringExtra(KEY_COST);
          String description = in.getStringExtra(KEY_DESC);*/
  
          // Displaying all values on the screen
          TextView lblName = (TextView) findViewById(R.id.name_label);
          TextView lblCost = (TextView) findViewById(R.id.cost_label);
          TextView lblDesc = (TextView) findViewById(R.id.description_label);
  
          lblName.setText(name);
          lblCost.setText(cost);
          lblDesc.setText(cost);
  
          Log.i("name", name+"");
          Log.i("cost", cost+"");
      }
  }
  </code></pre>
  
  <p><strong>XMLParser.java</strong></p>
  
  <pre><code>package com.androidhive.xmlparsing;
  
  import java.io.IOException;
  import java.io.StringReader;
  import java.io.UnsupportedEncodingException;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.ParserConfigurationException;
  
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.apache.http.util.EntityUtils;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  import android.util.Log;
  
  public class XMLParser {
  
      // constructor
      public XMLParser() {
  
      }
  
      /**
       * Getting XML from URL making HTTP request
       * @param url string
       * */
      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;
      }
  
      /**
       * Getting XML DOM element
       * @param XML string
       * */
      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 doc;
      }
  
      /** Getting node value
        * @param elem element
        */
       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 "";
       }
  
       /**
        * Getting node value
        * @param Element node
        * @param key string
        * */
       public String getValue(Element item, String str) {     
              NodeList n = item.getElementsByTagName(str);        
              return this.getElementValue(n.item(0));
          }
  }
  </code></pre>