Ş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;
}
}
}
Hiç yorum yok:
Yorum Gönder