Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

3 Ekim 2011 Pazartesi

SAXParser ile XML parse etmek

Daha önce bir kaç kelam etmiştim bu konuda. İşte adresi : http://sanirimbuyok.blogspot.com/2011/07/javada-defaulthandler.html
Şimdi bir başka örnekle daha üstünden geçelim.

Parçalanacak XML dosyası

<?xml version="1.0" encoding="utf-8"?>
<SORULAR>
	<SORU id="1" tipi="hd">
		<ICERIK>Soru 1 HD için?</ICERIK>
		<SECENEKLER>
			<SECENEK>evet</SECENEK>
			<SECENEK>hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="2" tipi="hd">
		<ICERIK>Soru 2 HD için?</ICERIK>
		<SECENEKLER>
			<SECENEK>evet</SECENEK>
			<SECENEK>hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="3" tipi="hd">
		<ICERIK>Soru 3 HD için?</ICERIK>
		<SECENEKLER>
			<SECENEK>doşru</SECENEK>
			<SECENEK>yanlşş</SECENEK>
			<SECENEK>gşzden geşirilmeli</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="4" tipi="pd">
		<ICERIK>PD için Soru 4 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>pd evet</SECENEK>
			<SECENEK>pd hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="5" tipi="pd">
		<ICERIK>PD için Soru 5 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>pd evet</SECENEK>
			<SECENEK>pd hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="6" tipi="pd">
		<ICERIK>PD için Soru 6 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>pd doşru</SECENEK>
			<SECENEK>pd yanlş</SECENEK>
			<SECENEK>pd gşzden geşirilmeli</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="7" tipi="ed">
		<ICERIK>ED: Soru 1 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>ed evet</SECENEK>
			<SECENEK>ed hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="8" tipi="pd">
		<ICERIK>ED: Soru 2 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>ed evet</SECENEK>
			<SECENEK>ed hayşr</SECENEK>
		</SECENEKLER>
	</SORU>
	<SORU id="9" tipi="pd">
		<ICERIK>ED: Soru 3 ?</ICERIK>
		<SECENEKLER>
			<SECENEK>ed doğru</SECENEK>
			<SECENEK>ed yanlış</SECENEK>
			<SECENEK>ed gözden geşirilmeli</SECENEK>
		</SECENEKLER>
	</SORU>
</SORULAR>

SAX Parser

package com.tabtest;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SaxOrnek extends Activity
{
	private static final String SORULAR_XML = "questions.xml";

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		try
		{
			ParseQuestions();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	public void ParseQuestions() throws ParserConfigurationException, SAXException, IOException
	{
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser parser = spf.newSAXParser();

		SoruParser soruParser = new SoruParser();
		InputSource isrc;
		try
		{
			isrc = new InputSource(getAssets().open(SORULAR_XML));

			parser.parse(isrc, soruParser);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

class SoruParser extends DefaultHandler
{

	private static final String SORU = "SORU";
	private static final String ID = "id";
	private static final String TIPI = "tipi";
	private static final String ICERIK = "ICERIK";
	private static final String SECENEKLER = "SECENEKLER";
	private static final String SECENEK = "SECENEK";

	String tag = "";

	public ArrayList arrSorular = new ArrayList();

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException
	{
		if (tag.equals(SORU) || tag.equals(ICERIK) || tag.equals(SECENEK))
		{
			String s = new String(ch, start, length);

			Soru soru = arrSorular.get(arrSorular.size() - 1);
			if (tag.equals(SORU))
			{
				super.characters(ch, start, length);
			}
			else if (tag.equals(ICERIK))
			{
				soru.Icerik = s;
			}
			else if (tag.equals(SECENEK))
			{
				soru.Secenekler.add(s);
			}
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException
	{
		Log.i("ENDELEMENT: ", qName);
		if (qName.equals(SECENEKLER) || qName.equals(SECENEK) || qName.equals(ICERIK))
		{
			tag = "";
		}
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
	{
		Log.i("Start Elements: ", qName);
		if (qName.equals(SORU))
		{
			String id = attributes.getValue(ID);
			String tipi = attributes.getValue(TIPI);

			arrSorular.add(new Soru(id, tipi));
			tag = SORU;
		}
		else if (qName.equals(ICERIK))
		{
			tag = ICERIK;
		}
		else if (qName.equals(SECENEKLER))
		{
			tag = SECENEKLER;
		}
		else if (qName.equals(SECENEK))
		{
			tag = SECENEK;
		}
	}

}