Tutorial 060-1, Data, SAX XML Parser

 

 

Tutorial_Data_SAXParserActivity

package com.powenko.Tutorial_Data_SAXParser;


import java.net.URL;

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 Tutorial_Data_SAXParserActivity extends Activity {
	
	
	private final String MY_DEBUG_TAG = "powenko.com";
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);

		/* Create a new TextView to display the parsingresult later. */
		TextView tv = new TextView(this);
		try {
			/* Create a URL we want to load some xml-data from. */
			URL url = new URL("http://www.powenko.com/download/example.xml");

			/* Get a SAXParser from the SAXPArserFactory. */
			SAXParserFactory spf = SAXParserFactory.newInstance();
			SAXParser sp = spf.newSAXParser();

			/* Get the XMLReader of the SAXParser we created. */
			XMLReader xr = sp.getXMLReader();
			/* Create a new ContentHandler and apply it to the XML-Reader*/ 
			SAXHandler myExampleHandler = new SAXHandler();
			xr.setContentHandler(myExampleHandler);
			
			/* Parse the xml-data from our URL. */
			xr.parse(new InputSource(url.openStream()));
			/* Parsing has finished. */

			/* Our ExampleHandler now provides the parsed data to us. */
			SAXParsedExampleDataSet parsedExampleDataSet = 
									myExampleHandler.getParsedData();

			/* Set the result to be displayed in our GUI. */
			tv.setText(parsedExampleDataSet.toString());
			
		} catch (Exception e) {
			/* Display any Error to the GUI. */
			tv.setText("Error: " + e.getMessage());
			Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);
		}
		/* Display the TextView. */
		this.setContentView(tv);
	}
}

SAXHandler

package com.powenko.Tutorial_Data_SAXParser;


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


public class SAXHandler extends DefaultHandler{

	// ===========================================================
	// Fields
	// ===========================================================
	
	private boolean in_outertag = false;
	private boolean in_innertag = false;
	private boolean in_mytag = false;
	
	private SAXParsedExampleDataSet myParsedExampleDataSet = new SAXParsedExampleDataSet();

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	public SAXParsedExampleDataSet getParsedData() {
		return this.myParsedExampleDataSet;
	}

	// ===========================================================
	// Methods
	// ===========================================================
	@Override
	public void startDocument() throws SAXException {
		this.myParsedExampleDataSet = new SAXParsedExampleDataSet();
	}

	@Override
	public void endDocument() throws SAXException {
		// Nothing to do
	}

	/** Gets be called on opening tags like: 
	 * <tag> 
	 * Can provide attribute(s), when xml was like:
	 * <tag attribute="attributeValue">*/
	@Override
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) throws SAXException {
		if (localName.equals("outertag")) {
			this.in_outertag = true;
		}else if (localName.equals("innertag")) {
			this.in_innertag = true;
		}else if (localName.equals("mytag")) {
			this.in_mytag = true;
		}else if (localName.equals("tagwithnumber")) {
			// Extract an Attribute
			String attrValue = atts.getValue("thenumber");
			int i = Integer.parseInt(attrValue);
			myParsedExampleDataSet.setExtractedInt(i);
		}
	}
	
	/** Gets be called on closing tags like: 
	 * </tag> */
	@Override
	public void endElement(String namespaceURI, String localName, String qName)
			throws SAXException {
		if (localName.equals("outertag")) {
			this.in_outertag = false;
		}else if (localName.equals("innertag")) {
			this.in_innertag = false;
		}else if (localName.equals("mytag")) {
			this.in_mytag = false;
		}else if (localName.equals("tagwithnumber")) {
			// Nothing to do here
		}
	}
	
	/** Gets be called on the following structure: 
	 * <tag>characters</tag> */
	@Override
    public void characters(char ch[], int start, int length) {
		if(this.in_mytag){
    		myParsedExampleDataSet.setExtractedString(new String(ch, start, length));
    	}
    }
}

SAXParsedExampleDataSet

package com.powenko.Tutorial_Data_SAXParser;


public class SAXParsedExampleDataSet {
	private String extractedString = null;
	private int extractedInt = 0;

	public String getExtractedString() {
		return extractedString;
	}
	public void setExtractedString(String extractedString) {
		this.extractedString = extractedString;
	}

	public int getExtractedInt() {
		return extractedInt;
	}
	public void setExtractedInt(int extractedInt) {
		this.extractedInt = extractedInt;
	}
	
	public String toString(){
		return "ExtractedString = " + this.extractedString
				+ "nExtractedInt = " + this.extractedInt;
	}
}

 

sample c0de:

Tutorial_Data_SAXParser

By admin-powenko

Dr. Powen Ko is a teacher and CEO on LoopTek LLC, and like to teaching. if you need to class, please let PowenKo know, he will love to service and sharing. LoopTek web site is www.looptek.com

Leave a Reply