I have this XML by URL
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Phonebook>
<PhonebookEntry>
<firstname>John</firstname>
<lastname>Connor</lastname>
<Address>5,Downing Street</Address>
<Phone loc="home">9875674567</Phone>
<Phone loc="work">9875674567</Phone>
<Phone loc="mobile">78654562341</Phone>
</PhonebookEntry>
<PhonebookEntry>
<firstname>John</firstname>
<lastname>Smith</lastname>
<Address>6,Downing Street</Address>
<Phone loc="home">678-56-home</Phone>
<Phone loc="work">678-59-work</Phone>
<Phone loc="mobile">678-85-mobile</Phone>
</PhonebookEntry>
</Phonebook>
I managed to extract the values for the name, name and address, but when it comes to Phone tags, my code returns null values. Here is my code:
ParsingXML.java
package com.example.parsingxml;
import java.net.Proxy;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class ParsingXML extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
try {
URL url = new URL("http://somedomain.com/jm/sampleXML.xml");
URLConnection ucon = url.openConnection();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
ExampleHandler myExampleHandler = new ExampleHandler();
xr.setContentHandler(myExampleHandler);
xr.parse(new InputSource(url.openStream()));
ParsedExampleDataSet parsedExampleDataSet =
myExampleHandler.getParsedData();
tv.setText(parsedExampleDataSet.toString());
} catch (Exception e) {
tv.setText("Error: " + e.getMessage());
}
this.setContentView(tv);
}
}
ExampleHandler.java
package com.example.parsingxml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ExampleHandler extends DefaultHandler{
private boolean in_outertag = false;
private boolean in_innertag = false;
private boolean in_firstname = false;
private boolean in_lastname= false;
private boolean in_Address=false;
private boolean in_Phone=false;
private boolean in_homePhone=false;
private boolean in_workPhone=false;
private boolean in_mobilePhone=false;
private ParsedExampleDataSet myParsedExampleDataSet = new ParsedExampleDataSet();
public ParsedExampleDataSet getParsedData() {
return this.myParsedExampleDataSet;
}
@Override
public void startDocument() throws SAXException {
this.myParsedExampleDataSet = new ParsedExampleDataSet();
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
if (localName.equals("PhoneBook")) {
this.in_outertag = true;
}else if (localName.equals("PhonebookEntry")) {
this.in_innertag = true;
}else if (localName.equals("firstname")) {
this.in_firstname = true;
}else if (localName.equals("lastname")) {
this.in_lastname= true;
}else if(localName.equals("Address")) {
this.in_Address= true;
}else if (localName.equals("Phone")){
this.in_Phone=true;
String phoneattr=atts.getValue("loc");
if(phoneattr.equals("home")){
this.in_homePhone=true;
}else if(phoneattr.equals("work")){
this.in_workPhone=true;
}else if(phoneattr.equals("mobile")){
this.in_mobilePhone=true;
}
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if (localName.equals("Phonebook")) {
this.in_outertag = false;
}else if (localName.equals("PhonebookEntry")) {
this.in_innertag = false;
}else if (localName.equals("firstname")) {
this.in_firstname = false;
}else if (localName.equals("lastname")) {
this.in_lastname= false;
}else if(localName.equals("Address")) {
this.in_Address= false;
}else if(localName.equals("Phone")) {
this.in_Phone=false;
}
}
@Override
public void characters(char ch[], int start, int length) {
if(this.in_firstname){
myParsedExampleDataSet.setfirstname(new String(ch, start, length));
}
if(this.in_lastname){
myParsedExampleDataSet.setlastname(new String(ch, start, length));
}
if(this.in_Address){
myParsedExampleDataSet.setAddress(new String(ch, start, length));
}
if(this.in_homePhone){
myParsedExampleDataSet.sethomePhone(new String(ch, start, length));
}
if(this.in_workPhone){
myParsedExampleDataSet.setworkPhone(new String(ch, start, length));
}
if(this.in_mobilePhone){
myParsedExampleDataSet.setmobilePhone(new String(ch, start, length));
}
}
}
ParsedExampleDataSet.java
package com.example.parsingxml;
public class ParsedExampleDataSet {
private String firstname = null;
private String lastname=null;
private String Address=null;
private String Phone=null;
private String homephone=null;
private String workphone=null;
private String mobilephone=null;
public String getfirstname() {
return firstname;
}
public void setfirstname(String firstname) {
this.firstname = firstname;
}
public String getlastname(){
return lastname;
}
public void setlastname(String lastname){
this.lastname=lastname;
}
public String getAddress(){
return Address;
}
public void setAddress(String Address){
this.Address=Address;
}
public String getPhone(){
return Phone;
}
public void sethomePhone(String homePhone){
this.homephone=homePhone;
}
public void setworkPhone(String homePhone){
this.homephone=homePhone;
}
public void setmobilePhone(String homePhone){
this.homephone=homePhone;
}
public String toString(){
return "firstname: " + this.firstname + "\n" + "lastname=: " + this.lastname + "\n" + "Address: " + this.Address+ "\n" + "homephone: " + this.homephone + "\n" + "workphone: " + this.workphone + "\n" + "mobilephone: " + this.mobilephone;
}
}
One more thing, how can I get both values in PhonebookEntry tags?
I am new to java and android dev, thanks a lot in advance! :)