Lab12 Android SAX & DOM parsers








data.xml

<?xml version="1.0"?>
<records>
<employee>
<name>Sachin Kumar</name>
<salary>50000</salary>
</employee>
<employee>
<name>Rahul Kumar</name>
<salary>60000</salary>
</employee>
<employee>
<name>John Mike</name>
<salary>70000</salary>
</employee>


<employee>
<name>Jackson Mike</name>
<salary>70000</salary>
</employee>


<employee>
<name>Johnny</name>
<salary>710000</salary>
</employee>


<employee>
<name>Julian Mike</name>
<salary>800000</salary>
</employee>
</records>

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="54dp"
        android:text="TextView" />

</RelativeLayout>


SAX Parser
Methods in SAX parser:
  • startDocument()
  • endDocument()
  • startElement()
  • endElement()
  • characters()
package mdad.lab12;

import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv=(TextView)findViewById(R.id.textView1);
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {
boolean name = false;
boolean salary = false;

public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("_______")) {
name = true;
}
if (qName.equalsIgnoreCase("_______")) {
salary = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
}
public void characters(char ch[], int start, int length) throws SAXException {
if (___________) {
tv.setText(tv.getText()+"\n\n Name : " + new String(ch, start, length));
name = false;
}
if (___________) {
tv.setText(tv.getText()+"\n Salary : " + new String(ch, start, length));
salary = false;
}
}//end of characters
};//end of DefaultHandler

InputStream is = getAssets().open("data.xml");
saxParser.parse(is, handler);

} catch (Exception e) {e.printStackTrace();}
}
}





if (qName.equalsIgnoreCase("name")) {
if (qName.equalsIgnoreCase("salary")) {
if (name) {
if (salary) {












DOM Parser
package mdad.lab12;

import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


//http://www.javatpoint.com/android-xml-parsing-using-dom-parser


public class MainActivity extends Activity {
TextView tv1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
try {
InputStream is = getAssets().open("data.xml");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(is);
Element element=doc.getDocumentElement();
element.normalize();

NodeList nList = doc.getElementsByTagName("employee");
for (int i=0; i<nList.getLength(); i++) {

Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {

Element element2 = (Element) node;
tv1.setText(tv1.getText()+"\n\nName : " + getValue("__________", _________)+"\n");
tv1.setText(tv1.getText()+"Salary : " + getValue("__________", _________)+"\n");
tv1.setText(tv1.getText()+"-----------------------");
}
}
} catch (Exception e) {e.printStackTrace();}

}
private static String getValue(String tag, Element element) {
NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodeList.item(0);
return node.getNodeValue();
}

}


tv1.setText(tv1.getText()+"\n\nName : " + getValue("name", element2)+"\n");
tv1.setText(tv1.getText()+"Salary : " + getValue("salary", element2)+"\n");




Part 3:   Make the TextView scrollable (Vertical)


At the XML Layout, activity_main.xml :


Add two lines to TextView tv1
<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="54dp"
        android:maxLines="20" 
        android:scrollbars="vertical" 
        android:text="TextView" />


At the MainActivity.java 
import android.text.method.LinkMovementMethod;
import android.text.method.ScrollingMovementMethod;

Add the following to the onCreate method
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
tv1.setMovementMethod(new ScrollingMovementMethod()); //For Scrollbar 
tv1.setMovementMethod(LinkMovementMethod.getInstance()); //For Hyperlink uses (optional)