Mehmet Ethem SULAN :: Android :: Android XML Parsing from Internet with DOM Multichoice ArrayAdapter Sample

Android ile internette olan countries.xml URLsindeki XML dosyasını DOM ile parse edip ArrayAdapter kullanarak android.R.layout.simple_list_item_multiple_choice kullanarak listeledim. Bu örneği daha iyi anlamak için Java Crontab XML file Parser JSP Ajax Example bakabilirisniz.
Android ile belirtilen urldeki xml dosyasına bağlanmak için internette erişim izni(AndroidManifest.xml) vermeyi unutmayın.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

xml parse


ParsingXML.java

package com.xml.parser;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ParsingXML extends Activity {
    private ListView listView_xml;
    private ArrayList<String> xmlList=new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView_xml=(ListView) findViewById(R.id.listView_xml);
        xmlList=getListFromXml();
        
    }
	private ArrayList<String> getListFromXml()  {
//localde bir liste oluşturuyoruz ve geri döndürüyoruz.
		ArrayList<String> list=new ArrayList<String>();
		try {
//<country> <text> Norway </text> <value> N </value> </country>  şeklinde bir xml elementleri
			URL url=new URL("http://www.w3schools.com/aspnet/countries.xml");
			DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder=dFactory.newDocumentBuilder();
//Verilen url de stream açiyor.
			Document document=dBuilder.parse(new InputSource(url.openStream()));
			document.getDocumentElement().normalize();
//Ana tag <country> childlarına for ile Node lerine erişiyoruz
			NodeList nodeListCountry=document.getElementsByTagName("country");
			for (int i = 0; i < nodeListCountry.getLength(); i++) {
				Node node=nodeListCountry.item(i);
				Element elementMain=(Element) node;
//getElementsByTagName() ile text ve value deki değerlere erişiyoruz.
				NodeList nodeListText=elementMain.getElementsByTagName("text");
//NodeListtedeki 0. itema erişiyoruz. 
				Element elementText=(Element) nodeListText.item(0);
				
				NodeList nodeListValue=elementMain.getElementsByTagName("value");
				Element elementValue=(Element) nodeListValue.item(0);
				
				list.add(elementText.getChildNodes().item(0).getNodeValue()+"--->"
						+elementValue.getChildNodes().item(0).getNodeValue());
			}
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		
		return list;
	}
	@Override
	protected void onStart() {
		super.onStart();
//multiple choice listadapter 
        ArrayAdapter<String> araAdapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_multiple_choice, xmlList);
        listView_xml.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView_xml.setAdapter(araAdapter);
	}
    
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView android:id="@+id/listView_xml" android:layout_height="wrap_content" android:layout_width="match_parent"></ListView>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.xml.parser"
      android:versionCode="1"
      android:versionName="1.0">
      
<uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="ParsingXML"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Download XmlParserSam.tar.gz

Comments

There are 10 comments for this post.

  1. Mehmet Ethem SULAN :: Android :: Android SAX Parser XML Parsing from the Net Custom ListView ListActivity on Mayıs 1, 2011 9:16 pm

    […] parse ettim ve SimpleAdapter kullanarak Custom Listview de listeledim. Daha iyi anlamanız için Android XML Parsing from Internet with DOM Multichoice ArrayAdapter Sample örneğine bakın. Output […]

  2. tolgahan on Ekim 19, 2011 3:56 pm

    hocam tebrik ediyorum güzel bir uygulama yanlız commenti biraz daha fazla koyarsan dha iyi olur mesala bazı yerlerde neden o fonk. kullanılmış bilemiyorum. gerçi dedigin gibi nette bir sürü açıklama var ama senin sayfandan ayrılmak istemiyorum.

  3. Kemal on Ekim 26, 2011 1:02 pm

    Tolgahan’a katılıyorum 🙂

  4. aykut on Ocak 7, 2012 12:22 pm

    Hocam merhaba,
    benim çok acil bir şekilde sabah.com un rss ini çekmem lazım. android işetim sisteminde internet sistesinden rss çekmek gibi bir tez konum var. çekeceğim link aşağıda, bunu nasıl başarabilirim? yardımcı olabilir misin? ciddi anlamda ihtiyacım var.( basit bir program ve görüntü olsa yeter dedi hocam ama ben ne öyle ders gördüm ne de eclipse kullandım beceremedim yani 🙁 )

    http://www.sabah.com.tr/rss/Anasayfa.xml

  5. fadime on Ocak 23, 2012 10:20 am

    Merhaba hocam.Androidde geliştirdiğim uygulamada ebay sitesinden bir ürünün fiyat bilgisini çekmek istiyorum.Bunun için ürünün barkod numarasını kullanacağım.Ebay geliştiricilere sağlamış olduğu keyler aracılığıyla erişime izin veriyor ancak barkod numarasına göre aramayı nasıl yaptırabilirim yardımcı olabilirmisiniz?Teşekkürler..

  6. Önder on Ağustos 12, 2012 3:50 pm

    bu kod sistemi ne yazıkki android 3.0 dan sonra çalışmıyor input stream e kadar kod ilerlerken get elementsbytagname kısmında öğrendiğim kadarı ile null değeri döndürüp dışarı atıyor bilginize

  7. erdi on Ağustos 14, 2012 10:27 pm

    Hocam,
    Bunu bir RSS reader gibi tasarlamak istersek SubItem eklemek konusunda bu örnek üzerinden ilerleyebilir miyiz?

  8. yavuz on Ocak 19, 2013 12:35 am

    andorid 3.0dan sonra çalısmıyor die sallama arkadaşım,biliyorsan yaz bilmiyorsan bu işe hiç karışma

  9. goktug ozel on Şubat 28, 2013 3:04 pm

    Merhabalar. Ben internet üzerinden sax parsing ile xml okuyorum. internetteki şu siteden deneme amaçlı pars ettim ancak sıra kendi hostumdaki xml dosyasına geldiğinde programım hata veriyor. hostumun izin yapılandırmasını kontrol ettim ve xml min bulundugu yere okuma yazma izinlerini verdim yine olmadı sorun nedir acaba yardımcı olursanız sevinirim. teşekkürler. Göktuğ ÖZEL

  10. rabia on Ağustos 23, 2013 12:08 pm

    Merhaba, Projeyi tekrardan paylaşmanız mümkünmü?

Write a Comment

Let me know what you think?