Step Past Times Stride Direct To Read Xml File Inward Coffee Using Sax Parser Example

Reading XML file inward coffee using SAX Parser is piddling unlike than reading xml file inward Java amongst DOM parser which nosotros had discussed inward final article of this series. This tutorial is tin move useful for those who are novel to the coffee the world in addition to got the requirement for read an xml file inward java inward their projection or assignment, primal characteristic of coffee is it provides built inward cast in addition to object to grip everything which makes our trouble real easy. Basically this procedure of treatment XML file is known equally parsing way suspension downwardly the whole string into pocket-sized pieces using the exceptional tokens.
Parsing tin move done using 2 ways:

  • Using DOM Parser
  • Using SAX Parser

Read XML file inward Java Using SAX Parser Example

In DOM parser nosotros receive got seen that nosotros receive got to follow uncomplicated 3 steps:
Ø      Parse the XML file
Ø      Create the coffee object
Ø      Manipulate the object way nosotros tin read that object or add together them to listing or whatsoever component subdivision nosotros desire nosotros tin do
But inward SAX Parser its piddling fleck different.

Reading XML file inward coffee using SAX Parser Step By Step conduct to Read XML file inward Java Using SAX Parser ExampleSAX Parser: it’s an upshot based parsing it contains default handler for treatment the events whenever SAX parser pareses the xml document in addition to it finds the Start tag “<” in addition to terminate tag”>” it calls corresponding handler method.

Though at that spot are other ways too to instruct information from xml file e.g. using XPATH inward Java which is a linguistic communication similar SQL in addition to give selective information from xml file.


Sample Example of reading XML File – SAX Parser

Suppose nosotros receive got this sample XML file bank.xml which contains draw of piece of employment concern human relationship details of all accounts inward a hypothetical bank:

<?xml version="1.0" encoding="UTF-8"?>
<Bank>
      <Account type="saving">
            <Id>1001</Id>
            <Name>Jack Robinson</Name>
            <Amt>10000</Amt>
      </Account>
      <Account type="current">
            <Id>1002</Id>
            <Name>Sony Corporation</Name>
            <Amt>1000000</Amt>
      </Account>
</Bank>



1.      Create the SAX parser in addition to parse the XML file:  In this measuring nosotros volition receive got ane mill illustration from SAXParserFactory to parse the xml  file this mill illustration inward turns  give us illustration of parser using the parse() method volition parse the Xml file.
2.      Event Handling: when Sax Parser starts the parsing whenever it founds the start or terminate tag it volition invoke the corresponding upshot treatment method which is public void startElement (…) in addition to world void terminate Element (...).

3.       Register the events: The cast extends the Default Handler cast to heed for callback events in addition to nosotros register this handler to sax Parser to notify us for telephone telephone dorsum event

Let see coffee code for all these steps

To correspond information from our sample xml file nosotros need ane coffee domain object called Account:

package parser;

public class Account {

       private String name;
       private int id;
       private int amt;
       private String type;

       public Account() {
       }

       public Account(String name, int id, int amt, String type) {
              this.name = name;
              this.amt = amt;
              this.id = id;
              this.type = type;
       }

       public int getAmt() {
              return amt;
       }

       public void setAmt(int amt) {
              this.amt = amt;
       }

       public int getId() {
              return id;
       }

       public void setId(int id) {
              this.id = id;
       }

       public String getName() {
              return name;
       }

       public void setName(String name) {
              this.name = name;
       }

       public String getType() {
              return type;
       }

       public void setType(String type) {
              this.type = type;
       }

       public String toString() {
              StringBuffer sb = new StringBuffer();
              sb.append("Account Details - ");
              sb.append("Name:" + getName());
              sb.append(", ");
              sb.append("Type:" + getType());
              sb.append(", ");
              sb.append("Id:" + getId());
              sb.append(", ");
              sb.append("Age:" + getAmt());
              sb.append(".");

              return sb.toString();
       }
}


Sample Code for implementing SAX parser inward Java


package parser;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import javax.xml.parsers.ParserConfigurationException;
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;

public class ReadXMLFileUsingSaxparser extends DefaultHandler {

       private Account acct;
       private String temp;
       private ArrayList<Account> accList = new ArrayList<Account>();

       /** The primary method sets things upward for parsing */
       public static void main(String[] args) throws IOException, SAXException,
                     ParserConfigurationException {
             
              //Create a "parser factory" for creating SAX parsers
              SAXParserFactory spfac = SAXParserFactory.newInstance();

              //Now role the parser mill to create a SAXParser object
              SAXParser sp = spfac.newSAXParser();

              //Create an illustration of this class; it defines all the handler methods
              ReadXMLFileUsingSaxparser handler = new ReadXMLFileUsingSaxparser();

              //Finally, say the parser to parse the input in addition to notify the handler
              sp.parse("bank.xml", handler);
             
              handler.readList();

       }


       /*
        * When the parser encounters plainly text (not XML elements),
        * it calls(this method, which accumulates them inward a string buffer
        */
       public void characters(char[] buffer, int start, int length) {
              temp = new String(buffer, start, length);
       }
      

       /*
        * Every fourth dimension the parser encounters the start of a novel element,
        * it calls this method, which resets the string buffer
        */ 
       public void startElement(String uri, String localName,
                     String qName, Attributes attributes) throws SAXException {
              temp = "";
              if (qName.equalsIgnoreCase("Account")) {
                     acct = new Account();
                     acct.setType(attributes.getValue("type"));

              }
       }

       /*
        * When the parser encounters the terminate of an element, it calls this method
        */
       public void endElement(String uri, String localName, String qName)
                     throws SAXException {

              if (qName.equalsIgnoreCase("Account")) {
                     // add together it to the list
                     accList.add(acct);

              } else if (qName.equalsIgnoreCase("Name")) {
                     acct.setName(temp);
              } else if (qName.equalsIgnoreCase("Id")) {
                     acct.setId(Integer.parseInt(temp));
              } else if (qName.equalsIgnoreCase("Amt")) {
                     acct.setAmt(Integer.parseInt(temp));
              }

       }

       private void readList() {
              System.out.println("No of  the accounts inward banking venture '" + accList.size()  + "'.");
              Iterator<Account> it = accList.iterator();
              while (it.hasNext()) {
                     System.out.println(it.next().toString());
              }
       }
      
}

Output:
No of  the accounts inward banking venture '2'.
Account Details - Name:Jack Robinson, Type:saving, Id:1001, Age:10000.
Account Details - Name:Sony Corporation, Type:current, Id:1002, Age:1000000.
 



Advantage of SAX parser inward Java:
It is faster than DOM parser because it volition non charge the XML document into the retention .its an upshot based.

Further Reading
Java Fundamentals: The Java Language
XML Fundamentals
RESTFul Services inward Java using Jersey
Core Java, Volume II--Advanced Features
XSLT 2.0 in addition to 1.0 Foundations

Some other Tutorial you lot may like



Belum ada Komentar untuk "Step Past Times Stride Direct To Read Xml File Inward Coffee Using Sax Parser Example"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel