SlideShare a Scribd company logo
XML Parsers


  By Chongbing Liu
XML Parsers

   What is a XML parser?
   DOM and SAX parser API
   Xerces-J parsers overview
   Work with XML parsers (example)
What is a XML Parser?
It is a software library (or a package) that
 provides methods (or interfaces) for client
 applications to work with XML documents
It checks the well-formattedness
It may validate the documents
It does a lot of other detailed things so that
 a client is shielded from that complexities
What is a XML Parser?
       (continued)
DOM and SAX Parsers
          in general


DOM: Document Object Model
SAX: Simple API for XML
A DOM parser implements DOM API
A SAX parser implement SAX API
Most major parsers implement both
 DOM and SAX API’s
DOM and SAX Parsers
        DOM parsers


• DOM Document object

• Main features of DOM parsers
DOM and SAX Parsers
          DOM Document Object
A DOM document is an object containing
 all the information of an XML document

It is composed of a tree (DOM tree) of
 nodes , and various nodes that are somehow
 associated with other nodes in the tree but
 are not themselves part of the DOM tree
DOM and SAX Parsers
      DOM Document Object
There are 12 types of nodes in a DOM
 Document object
     Document node
     Element node
     Text node
     Attribute node
     Processing instruction node
     …….
DOM and SAX Parsers
   DOM parsers – continued (Appendix)
Sample XML document

<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href=“test.css"?>
<!-- It's an xml-stylesheet processing instruction. -->
<!DOCTYPE shapes SYSTEM “shapes.dtd">
<shapes>
       ……
       <squre color=“BLUE”>
           <length> 20 </length>
       </squre>
       ……
 </shapes>
DOM and SAX Parsers
DOM parsers – continued (Appendix)
DOM and SAX Parsers
       main features of DOM parsers
A DOM parser creates an internal structure in
 memory which is a DOM document object
Client applications get the information of the
 original XML document by invoking methods
 on this Document object or on other objects it
 contains
DOM parser is tree-based (or DOM obj-based)
Client application seems to be pulling the data
 actively, from the data flow point of view
DOM and SAX Parsers
 main features of DOM parsers (cont.)
 Advantage:
   (1) It is good when random access to widely
       separated parts of a document is required
   (2) It supports both read and write operations

 Disadvantage:
   (1) It is memory inefficient
   (2) It seems complicated, although not really
DOM and SAX Parsers
                 SAX parsers

It does not first create any internal structure
Client does not specify what methods to call
Client just overrides the methods of the API
 and place his own code inside there
When the parser encounters start-tag, end-
 tag,etc., it thinks of them as events
DOM and SAX Parsers
             SAX parsers (cont.)
When such an event occurs, the handler
 automatically calls back to a particular method
 overridden by the client, and feeds as arguments
 the method what it sees
SAX parser is event-based,it works like an event
 handler in Java (e.g. MouseAdapter)
Client application seems to be just receiving the
 data inactively, from the data flow point of view
DOM and SAX Parsers
             SAX parsers (cont.)
Advantage:
   (1) It is simple
   (2) It is memory efficient
   (3) It works well in stream application
Disadvantage:
 The data is broken into pieces and clients
 never have all the information as a whole
 unless they create their own data structure
Appendix: Call back in Java
 class MyMouseListener extends java.awt.event.MouseAdapter {
     /** Overriding the method mousePressed(). */
     public void mousePressed(java.awt.event.MouseEvent event) {
       ..…do something here after the mouse is pressed …….
     }

     /** Overriding the method mousePressed(). */
     public void mouseReleased(java.awt.event.MouseEvent event) {
       ..…do something here after the mouse is released …….
     }
 }
 MyMouseListener Listener = new MyMouseListener();
 java.awt.Button MyButton=new java.awt.Button("ok");
 MyButton.addMouseListener(Listener);
DOM and SAX Parsers
Xerces-J Parser Overview
It is a Java package
Provides two parsers, one is a DOM parser
 and another is a SAX parser
It is a validating parser
It fully supports DOM2 and SAX2, and
 partially supports DOM3 (W3C XML
 Schema)
It is very popular
Xerces-J Parser Overview
                package structure
java.lang.Object
  | +--org.apache.xerces.framework.XMLParser
          | +-- org.apache.xerces.parsers.DOMParser
            +-- org.apache.xerces.parsers.SAXParser
Xerces-J Parser Overview
      DOMParser methods
 Void parse (java.lang.String systemId)
   Parses the input source specified by
  the
   given system identifier.
 Document getDocument()
   Returns the document
 ……
Xerces-J DOMParser
     DOM interfaces

     Document
     Element
     Attr
     NodeList
     ProcessingInstruction
     NamedNodeMap
     .....
Xerces-J Parser Overview
                 SAXParser methods
 Void parse (java.lang.String systemId)
   Parses the input source specified by the
   given system identifier.
 Void setContentHandler(Contenthandler handler)
  Allow an application to register a content event handler.
 Void setErrorHandler(Errorhandler handler)
  Set error handler.
 ……
Xerces-J Parser Overview
     SAXParser interfaces

       ContentHandler

       DTDHandler

       EntityResolver

       ErrorHandler
Work with XML Parsers
            Example
 Task: Extract all information about
   circles

 <?xml version="1.0"?>
 <!DOCTYPE shapes SYSTEM “shapes.dtd">
 <shapes>
       <circle color=“BLUE”>
            <x> 20 </x>
            <y> 20 </y>
            <radius> 20 </radius>
       </circle>
 </shapes>
Example
        DOMParser:create client class
public class shapes_DOM {
   static int numberOfCircles = 0;
   static int x[] = new int[1000];
   static int y[] = new int[1000];
   static int r[] = new int[1000];
   static String color[] = new String[1000];

    public static void main(String[] args) {
       ……
    }
}
Example
  (DOMParser: create a DOMParser)
import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
 public class shapes_DOM {
     ……
    public static void main(String [ ] args ) {
          try{
               DOMParser parser=new DOMParser();

              parser.parse(args[0]);
              Document doc=parser.getDocument();
              ……
         }    catch (Exception e) {
                  e.printStackTrace(System.err);
              }
     }
Example
(DOMParser: get all the circle nodes)


NodeList nodelist =
  doc.getElementsByTagName("circle");

numberOfCircles = nodelist.getLength();
Example
    (DOMParser: iterate over circle nodes)

for(int i=0; i<nodelist.getLength(); i++) {

     Node node = nodelist.item(i);
         .
         .
         .
}
Example
           (DOMParser: get color attribute)


25     NamedNodeMap attrs = node.getAttributes();
26     if(attrs.getLength()!=0)
26’       color[i]=
      (String)attrs.getNamedItem("color").getNodeValue();
Example
            (DOMParser: get child nodes)
27 // get the child nodes of a circle
28 NodeList childnodelist = node.getChildNodes();

29 // get the x and y
30 for(int j=0; j<childnodelist.getLength(); j++) {
31   Node childnode = childnodelist.item(j);
32   Node textnode = childnode.getFirstChild();
33   String childnodename = childnode.getNodeName();
34   if(childnodename.equals("x"))
35     x[i]=Integer.parseInt(textnode.getNodeValue().trim());
36   else if(childnodename.equals("y"))
37     y[i]=Integer.parseInt(textnode.getNodeValue().trim());
38   else if(childnodename.equals("radius"))
39     r[i]=Integer.parseInt(texxtnode.getNodeValue().trim())
40 }
Example
         (SAXarser: create client class)
public class shapes_SAX extends DefaultHandler {
   static int numberOfCircles = 0;
   static int x[] = new int[1000];
   static int y[] = new int[1000];
   static int r[] = new int[1000];
   static String color[] = new String[1000];

    public static void main(String[] args) {
       ……
    }
}
Example
      (SAXParser: create a SAXParser)
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import org.apache.xerces.parsers.SAXParser;
  public class shapes_SAX extends DefaultHandler {
     public static void main(String [ ] args ) {
        try{
           shapes_SAX SAXHandler = new shapes_SAX();
           SAXParser parser = new SAXParser();
           parser.setContentHandler(SAXHandler);
           parser.parse(args[0]);
        }    catch (Exception e) { … … }
     }
}
Example
   (SAXParser: override methods of interest)

startDocument()          endDocument()
startElement()           endElement()
startCDATA()             endCDATA()
startDTD()               endDTD()
characters()
 … …
Example
        (SAXParser: override startElement() )
21 public void startElement(String uri, String localName,
                   String rawName, Attributes attributes) {
22 if(rawName.equals("circle" )
23     color[numberOfCircles]=attributes.getValue("color");
26 else if(rawName.equals("x"))
27    flagX = 1;
28 else if(rawName.equals("y"))
29    flagY = 1;
30 else if(rawName.equals("radius"))
31    flagR = 1;
32 }
Example
   (SAXParser: override endElement() )

33 public void endElement(String uri, String
               localName, String rawName) {
34          numberOfCircles += 1;
35 }
Example
         (SAXParser: override characters() )
36 public void characters(char characters[], int start,
                          int length) {
38         String characterData =
39             (new String(characters,start,length)).trim();
42         if(flagX==1) {
43             x[numberOfCircles] = Integer.parseInt(characterData);
               flagX=0;
           }
44         if(flagY==1) {
45             y[numberOfCircles] = Integer.parseInt(characterData);
               flagY=0;
           }
46         if(flagR==1) {
47             r[numberOfCircles] = Integer.parseInt(characterData);
               flagR=0;
           }
49 }
Example
    (SAXParser: override endDocument() )


50 public void endDocument() {
51         // print the result
52     System.out.println("circles="+numberOfCircles);
53     for(int i=0;i<numberOfCircles;i++) {
54        String line="";
55       line=line+"(x="+x[i]+",y="+y[i]+",r="+r[i]
                   +",color="+color[i]+")";
56        System.out.println(line);
57     }
58 }
DOM and SAX Parsers

More Related Content

PDF
The Ring programming language version 1.6 book - Part 32 of 189
PPTX
Basic java, java collection Framework and Date Time API
PDF
The Ring programming language version 1.6 book - Part 35 of 189
PDF
[2019-07] GraphQL in depth (serverside)
PDF
The Ring programming language version 1.10 book - Part 47 of 212
PDF
C# Starter L04-Collections
PDF
The Ring programming language version 1.5.3 book - Part 30 of 184
PDF
The Ring programming language version 1.6 book - Part 40 of 189
The Ring programming language version 1.6 book - Part 32 of 189
Basic java, java collection Framework and Date Time API
The Ring programming language version 1.6 book - Part 35 of 189
[2019-07] GraphQL in depth (serverside)
The Ring programming language version 1.10 book - Part 47 of 212
C# Starter L04-Collections
The Ring programming language version 1.5.3 book - Part 30 of 184
The Ring programming language version 1.6 book - Part 40 of 189

What's hot (20)

PDF
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
PDF
The Ring programming language version 1.5.1 book - Part 36 of 180
PDF
The Ring programming language version 1.5.2 book - Part 37 of 181
PPT
Collection v3
PDF
The Ring programming language version 1.7 book - Part 41 of 196
PPTX
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
PDF
The Ring programming language version 1.5.2 book - Part 32 of 181
PPT
J query
PDF
The Ring programming language version 1.8 book - Part 43 of 202
PDF
The Ring programming language version 1.3 book - Part 83 of 88
PDF
PPTX
J query1
PDF
The Ring programming language version 1.9 book - Part 46 of 210
PPTX
Working With JQuery Part1
PDF
Swift for TensorFlow - CoreML Personalization
PDF
The Ring programming language version 1.2 book - Part 22 of 84
PDF
The Ring programming language version 1.5.3 book - Part 33 of 184
PPTX
11. session 11 functions and objects
PPTX
Java and XML Schema
PDF
Scala - en bedre og mere effektiv Java?
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
The Ring programming language version 1.5.1 book - Part 36 of 180
The Ring programming language version 1.5.2 book - Part 37 of 181
Collection v3
The Ring programming language version 1.7 book - Part 41 of 196
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
The Ring programming language version 1.5.2 book - Part 32 of 181
J query
The Ring programming language version 1.8 book - Part 43 of 202
The Ring programming language version 1.3 book - Part 83 of 88
J query1
The Ring programming language version 1.9 book - Part 46 of 210
Working With JQuery Part1
Swift for TensorFlow - CoreML Personalization
The Ring programming language version 1.2 book - Part 22 of 84
The Ring programming language version 1.5.3 book - Part 33 of 184
11. session 11 functions and objects
Java and XML Schema
Scala - en bedre og mere effektiv Java?
Ad

Viewers also liked (16)

PPTX
The Districts of Independent Fairfield
PPTX
Blending genre, altering style
PPTX
Healthyliving jbowen1-2
PDF
Dissertação oficial
PPTX
Pres
PPSX
Automatic Detection of Diabetic Maculopathy from Funduas Images Using Image A...
PPTX
Judicial456
PPTX
Глобално проучване - "Нагласите към плетивата и плетенето".
PPTX
Checks and Balances
PPTX
If executive branch specific
PPTX
Resume jeremy ppt
PPTX
Audio lingual
PPTX
A global research on the topic of "Attitudes towards knitting".
PPTX
Norris priester slides final
DOCX
Analisis persaingan tekomsel vs indosat
PPSX
Automatic Detection of Diabetic Maculopathy from Fundus Images Using Image An...
The Districts of Independent Fairfield
Blending genre, altering style
Healthyliving jbowen1-2
Dissertação oficial
Pres
Automatic Detection of Diabetic Maculopathy from Funduas Images Using Image A...
Judicial456
Глобално проучване - "Нагласите към плетивата и плетенето".
Checks and Balances
If executive branch specific
Resume jeremy ppt
Audio lingual
A global research on the topic of "Attitudes towards knitting".
Norris priester slides final
Analisis persaingan tekomsel vs indosat
Automatic Detection of Diabetic Maculopathy from Fundus Images Using Image An...
Ad

Similar to Xm lparsers (20)

PPT
Xml parsers
PPT
XML SAX PARSING
PDF
Service Oriented Architecture - Unit II - Sax
PPTX
Sax parser
PPT
Processing XML with Java
PPT
Sax Dom Tutorial
PPT
5 xml parsing
PDF
SAX, DOM & JDOM parsers for beginners
PPT
PDF
Parsing XML Data
PDF
Xml parser
PPTX
Dom parser
PDF
Xml parsing
PDF
24sax
PDF
Ch23
PDF
Ch23 xml processing_with_java
PDF
Web Technologies (8/12): XML & HTML Data Processing. Simple API for XML. Simp...
DOCX
PDF
Xml And JSON Java
Xml parsers
XML SAX PARSING
Service Oriented Architecture - Unit II - Sax
Sax parser
Processing XML with Java
Sax Dom Tutorial
5 xml parsing
SAX, DOM & JDOM parsers for beginners
Parsing XML Data
Xml parser
Dom parser
Xml parsing
24sax
Ch23
Ch23 xml processing_with_java
Web Technologies (8/12): XML & HTML Data Processing. Simple API for XML. Simp...
Xml And JSON Java

Recently uploaded (20)

PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PDF
RMMM.pdf make it easy to upload and study
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
Cell Structure & Organelles in detailed.
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
Classroom Observation Tools for Teachers
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
Basic Mud Logging Guide for educational purpose
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
01-Introduction-to-Information-Management.pdf
PDF
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
Insiders guide to clinical Medicine.pdf
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PPTX
Cell Types and Its function , kingdom of life
PDF
O7-L3 Supply Chain Operations - ICLT Program
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
RMMM.pdf make it easy to upload and study
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Cell Structure & Organelles in detailed.
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
Anesthesia in Laparoscopic Surgery in India
Classroom Observation Tools for Teachers
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Basic Mud Logging Guide for educational purpose
Final Presentation General Medicine 03-08-2024.pptx
01-Introduction-to-Information-Management.pdf
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
Module 4: Burden of Disease Tutorial Slides S2 2025
Insiders guide to clinical Medicine.pdf
human mycosis Human fungal infections are called human mycosis..pptx
Cell Types and Its function , kingdom of life
O7-L3 Supply Chain Operations - ICLT Program

Xm lparsers

  • 1. XML Parsers By Chongbing Liu
  • 2. XML Parsers  What is a XML parser?  DOM and SAX parser API  Xerces-J parsers overview  Work with XML parsers (example)
  • 3. What is a XML Parser? It is a software library (or a package) that provides methods (or interfaces) for client applications to work with XML documents It checks the well-formattedness It may validate the documents It does a lot of other detailed things so that a client is shielded from that complexities
  • 4. What is a XML Parser? (continued)
  • 5. DOM and SAX Parsers in general DOM: Document Object Model SAX: Simple API for XML A DOM parser implements DOM API A SAX parser implement SAX API Most major parsers implement both DOM and SAX API’s
  • 6. DOM and SAX Parsers DOM parsers • DOM Document object • Main features of DOM parsers
  • 7. DOM and SAX Parsers DOM Document Object A DOM document is an object containing all the information of an XML document It is composed of a tree (DOM tree) of nodes , and various nodes that are somehow associated with other nodes in the tree but are not themselves part of the DOM tree
  • 8. DOM and SAX Parsers DOM Document Object There are 12 types of nodes in a DOM Document object Document node Element node Text node Attribute node Processing instruction node …….
  • 9. DOM and SAX Parsers DOM parsers – continued (Appendix) Sample XML document <?xml version="1.0"?> <?xml-stylesheet type="text/css" href=“test.css"?> <!-- It's an xml-stylesheet processing instruction. --> <!DOCTYPE shapes SYSTEM “shapes.dtd"> <shapes> …… <squre color=“BLUE”> <length> 20 </length> </squre> …… </shapes>
  • 10. DOM and SAX Parsers DOM parsers – continued (Appendix)
  • 11. DOM and SAX Parsers main features of DOM parsers A DOM parser creates an internal structure in memory which is a DOM document object Client applications get the information of the original XML document by invoking methods on this Document object or on other objects it contains DOM parser is tree-based (or DOM obj-based) Client application seems to be pulling the data actively, from the data flow point of view
  • 12. DOM and SAX Parsers main features of DOM parsers (cont.)  Advantage: (1) It is good when random access to widely separated parts of a document is required (2) It supports both read and write operations  Disadvantage: (1) It is memory inefficient (2) It seems complicated, although not really
  • 13. DOM and SAX Parsers SAX parsers It does not first create any internal structure Client does not specify what methods to call Client just overrides the methods of the API and place his own code inside there When the parser encounters start-tag, end- tag,etc., it thinks of them as events
  • 14. DOM and SAX Parsers SAX parsers (cont.) When such an event occurs, the handler automatically calls back to a particular method overridden by the client, and feeds as arguments the method what it sees SAX parser is event-based,it works like an event handler in Java (e.g. MouseAdapter) Client application seems to be just receiving the data inactively, from the data flow point of view
  • 15. DOM and SAX Parsers SAX parsers (cont.) Advantage: (1) It is simple (2) It is memory efficient (3) It works well in stream application Disadvantage: The data is broken into pieces and clients never have all the information as a whole unless they create their own data structure
  • 16. Appendix: Call back in Java class MyMouseListener extends java.awt.event.MouseAdapter { /** Overriding the method mousePressed(). */ public void mousePressed(java.awt.event.MouseEvent event) { ..…do something here after the mouse is pressed ……. } /** Overriding the method mousePressed(). */ public void mouseReleased(java.awt.event.MouseEvent event) { ..…do something here after the mouse is released ……. } } MyMouseListener Listener = new MyMouseListener(); java.awt.Button MyButton=new java.awt.Button("ok"); MyButton.addMouseListener(Listener);
  • 17. DOM and SAX Parsers
  • 18. Xerces-J Parser Overview It is a Java package Provides two parsers, one is a DOM parser and another is a SAX parser It is a validating parser It fully supports DOM2 and SAX2, and partially supports DOM3 (W3C XML Schema) It is very popular
  • 19. Xerces-J Parser Overview package structure java.lang.Object | +--org.apache.xerces.framework.XMLParser | +-- org.apache.xerces.parsers.DOMParser +-- org.apache.xerces.parsers.SAXParser
  • 20. Xerces-J Parser Overview DOMParser methods  Void parse (java.lang.String systemId) Parses the input source specified by the given system identifier.  Document getDocument() Returns the document  ……
  • 21. Xerces-J DOMParser DOM interfaces  Document  Element  Attr  NodeList  ProcessingInstruction  NamedNodeMap  .....
  • 22. Xerces-J Parser Overview SAXParser methods  Void parse (java.lang.String systemId) Parses the input source specified by the given system identifier.  Void setContentHandler(Contenthandler handler) Allow an application to register a content event handler.  Void setErrorHandler(Errorhandler handler) Set error handler.  ……
  • 23. Xerces-J Parser Overview SAXParser interfaces  ContentHandler  DTDHandler  EntityResolver  ErrorHandler
  • 24. Work with XML Parsers Example Task: Extract all information about circles <?xml version="1.0"?> <!DOCTYPE shapes SYSTEM “shapes.dtd"> <shapes> <circle color=“BLUE”> <x> 20 </x> <y> 20 </y> <radius> 20 </radius> </circle> </shapes>
  • 25. Example DOMParser:create client class public class shapes_DOM { static int numberOfCircles = 0; static int x[] = new int[1000]; static int y[] = new int[1000]; static int r[] = new int[1000]; static String color[] = new String[1000]; public static void main(String[] args) { …… } }
  • 26. Example (DOMParser: create a DOMParser) import org.w3c.dom.*; import org.apache.xerces.parsers.DOMParser; public class shapes_DOM { …… public static void main(String [ ] args ) { try{ DOMParser parser=new DOMParser(); parser.parse(args[0]); Document doc=parser.getDocument(); …… } catch (Exception e) { e.printStackTrace(System.err); } }
  • 27. Example (DOMParser: get all the circle nodes) NodeList nodelist = doc.getElementsByTagName("circle"); numberOfCircles = nodelist.getLength();
  • 28. Example (DOMParser: iterate over circle nodes) for(int i=0; i<nodelist.getLength(); i++) { Node node = nodelist.item(i); . . . }
  • 29. Example (DOMParser: get color attribute) 25 NamedNodeMap attrs = node.getAttributes(); 26 if(attrs.getLength()!=0) 26’ color[i]= (String)attrs.getNamedItem("color").getNodeValue();
  • 30. Example (DOMParser: get child nodes) 27 // get the child nodes of a circle 28 NodeList childnodelist = node.getChildNodes(); 29 // get the x and y 30 for(int j=0; j<childnodelist.getLength(); j++) { 31 Node childnode = childnodelist.item(j); 32 Node textnode = childnode.getFirstChild(); 33 String childnodename = childnode.getNodeName(); 34 if(childnodename.equals("x")) 35 x[i]=Integer.parseInt(textnode.getNodeValue().trim()); 36 else if(childnodename.equals("y")) 37 y[i]=Integer.parseInt(textnode.getNodeValue().trim()); 38 else if(childnodename.equals("radius")) 39 r[i]=Integer.parseInt(texxtnode.getNodeValue().trim()) 40 }
  • 31. Example (SAXarser: create client class) public class shapes_SAX extends DefaultHandler { static int numberOfCircles = 0; static int x[] = new int[1000]; static int y[] = new int[1000]; static int r[] = new int[1000]; static String color[] = new String[1000]; public static void main(String[] args) { …… } }
  • 32. Example (SAXParser: create a SAXParser) import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import org.apache.xerces.parsers.SAXParser; public class shapes_SAX extends DefaultHandler { public static void main(String [ ] args ) { try{ shapes_SAX SAXHandler = new shapes_SAX(); SAXParser parser = new SAXParser(); parser.setContentHandler(SAXHandler); parser.parse(args[0]); } catch (Exception e) { … … } } }
  • 33. Example (SAXParser: override methods of interest) startDocument() endDocument() startElement() endElement() startCDATA() endCDATA() startDTD() endDTD() characters()  … …
  • 34. Example (SAXParser: override startElement() ) 21 public void startElement(String uri, String localName, String rawName, Attributes attributes) { 22 if(rawName.equals("circle" ) 23 color[numberOfCircles]=attributes.getValue("color"); 26 else if(rawName.equals("x")) 27 flagX = 1; 28 else if(rawName.equals("y")) 29 flagY = 1; 30 else if(rawName.equals("radius")) 31 flagR = 1; 32 }
  • 35. Example (SAXParser: override endElement() ) 33 public void endElement(String uri, String localName, String rawName) { 34 numberOfCircles += 1; 35 }
  • 36. Example (SAXParser: override characters() ) 36 public void characters(char characters[], int start, int length) { 38 String characterData = 39 (new String(characters,start,length)).trim(); 42 if(flagX==1) { 43 x[numberOfCircles] = Integer.parseInt(characterData); flagX=0; } 44 if(flagY==1) { 45 y[numberOfCircles] = Integer.parseInt(characterData); flagY=0; } 46 if(flagR==1) { 47 r[numberOfCircles] = Integer.parseInt(characterData); flagR=0; } 49 }
  • 37. Example (SAXParser: override endDocument() ) 50 public void endDocument() { 51 // print the result 52 System.out.println("circles="+numberOfCircles); 53 for(int i=0;i<numberOfCircles;i++) { 54 String line=""; 55 line=line+"(x="+x[i]+",y="+y[i]+",r="+r[i] +",color="+color[i]+")"; 56 System.out.println(line); 57 } 58 }
  • 38. DOM and SAX Parsers