Ş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 ArrayListarrSorular = 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; } } }