Last active
June 16, 2016 06:13
-
-
Save Swimburger/8b2556123a541627cbed to your computer and use it in GitHub Desktop.
Parsing xml example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package be.howest.nmct.studentenhuizen.data; | |
import android.util.Xml; | |
import org.xmlpull.v1.XmlPullParser; | |
import org.xmlpull.v1.XmlPullParserException; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.net.URL; | |
import java.util.ArrayList; | |
import java.util.List; | |
/** | |
* Created by Niels on 7/05/2014. | |
* based on | |
* http://developer.android.com/training/basics/network-ops/xml.html | |
*/ | |
public class StudentenHuisService { | |
private static StudentenHuisService instance; | |
private static final String DATAURL="http://data.drk.be/kortrijk/studentenhuizen.xml"; | |
public static StudentenHuisService getInstance(){ | |
if(instance==null) | |
{ | |
instance=new StudentenHuisService(); | |
} | |
return instance; | |
} | |
private List<StudentenHuis> studentenHuizen; | |
private StudentenHuisService() | |
{ | |
} | |
public List<StudentenHuis> getStudentenHuizen(){ | |
if(studentenHuizen==null) | |
{ | |
try { | |
FetchHuizen(DATAURL); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
return studentenHuizen; | |
} | |
private void FetchHuizen(String url) throws XmlPullParserException, IOException { | |
InputStream in = new URL(url).openStream(); | |
try { | |
XmlPullParser parser = Xml.newPullParser(); | |
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); | |
parser.setInput(in, null); | |
parser.nextTag(); | |
studentenHuizen= readXMLHuizen(parser); | |
} finally { | |
in.close(); | |
} | |
} | |
private List<StudentenHuis> readXMLHuizen(XmlPullParser parser) throws IOException, XmlPullParserException { | |
List<StudentenHuis> huizen=new ArrayList<StudentenHuis>(); | |
while(parser.next()!=XmlPullParser.END_TAG) | |
{ | |
if(parser.getEventType()!=XmlPullParser.START_TAG) { | |
continue; | |
} | |
String name = parser.getName(); | |
if(name.equals("studentenhuizen")) | |
{ | |
huizen.add(readXMLHuis(parser)); | |
}else{ | |
skip(parser); | |
} | |
} | |
return huizen; | |
} | |
private StudentenHuis readXMLHuis(XmlPullParser parser) throws IOException, XmlPullParserException { | |
StudentenHuis huis = new StudentenHuis(); | |
while(parser.next()!=XmlPullParser.END_TAG) | |
{ | |
if (parser.getEventType() != XmlPullParser.START_TAG) { | |
continue; | |
} | |
String name = parser.getName(); | |
if (name.equals("adres")) { | |
huis.setAdres(readText(parser)); | |
} else if (name.equals("huisnr")) { | |
huis.setHuisnr(readText(parser)); | |
} else if (name.equals("bisnr.")) { | |
huis.setBisnr(readText(parser)); | |
} else if (name.equals("busnr.")) { | |
huis.setBusnr(readText(parser)); | |
} else if (name.equals("gemeente")) { | |
huis.setGemeente(readText(parser)); | |
} else if (name.equals("aantal_kamers")) { | |
String text = readText(parser); | |
if(text!=null) | |
huis.setAantal_kamers(Integer.parseInt(text)); | |
} else if (name.equals("kad.afd")) { | |
huis.setKad_afd(readText(parser)); | |
} else if (name.equals("kad.sectie")) { | |
huis.setKad_sectie(readText(parser)); | |
} else if (name.equals("kad.nr.")) { | |
huis.setKad_nr(readText(parser)); | |
}else { | |
skip(parser); | |
} | |
} | |
return huis; | |
} | |
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException { | |
String result = ""; | |
if (parser.next() == XmlPullParser.TEXT) { | |
result = parser.getText(); | |
parser.nextTag(); | |
} | |
return result; | |
} | |
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException { | |
if (parser.getEventType() != XmlPullParser.START_TAG) { | |
throw new IllegalStateException(); | |
} | |
int depth = 1; | |
while (depth != 0) { | |
switch (parser.next()) { | |
case XmlPullParser.END_TAG: | |
depth--; | |
break; | |
case XmlPullParser.START_TAG: | |
depth++; | |
break; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment