20 June 2014

Reading XML file using SAX Parser in Java



The SAX parser provides more efficient way to read large xml than DOM parser. The example will show how to read an xml file by using SAX parser.

Content.java
package org.metadata.core.xml;

public class Content {
    private String value;
    private String color;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
 
XMLFileReader.java
package org.metadata.core.xml;

import java.io.CharArrayWriter;

import java.util.ArrayList;
import java.util.List;

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 XMLFileReader {
    private class Reader extends DefaultHandler {
        private List<Content> contentList = new ArrayList<Content>();
        private Content content = null;
        CharArrayWriter text = null;

        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            text = new CharArrayWriter();
            if (qName.equalsIgnoreCase("LINE")) {
                content = new Content();
                contentList.add(content);
            }
        }

        public void endElement(String uri, String localName, String qName) throws SAXException {
            if (qName.equalsIgnoreCase("CONTENT")) {
                content.setValue(getText());
            } else if (qName.equalsIgnoreCase("COLOR")) {
                content.setColor(getText());
            }
        }

        public void characters(char[] ch, int start, int length) throws SAXException {
            text.write(ch, start, length);
        }

        public List<Content> getContentList() {
            return contentList;
        }

        public String getText() {
            return text.toString().trim();
        }
    }

    public List<Content> getContentList() {
        Reader reader = new Reader();
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse("resources/sample.xml", reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return reader.getContentList();
    }

    public static void main(String[] argv) {
        XMLFileReader xmlReader = new XMLFileReader();
        List<Content> contentList = xmlReader.getContentList();
        for (Content c : contentList) {
            System.out.println(c.getValue() + " - " + c.getColor());
        }
    }
}

  1. Create a folder name with “resources” and set the folder into the classpath. 
  2.  Put the “sample.xml” file into the “resources” folder.
sample.xml
<?xml version="1.0" encoding="UTF-8"?>
<noties xsi:noNamespaceSchemaLocation="sample.xsd"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <notic>
      <line>
          <content>Mutu</content>
          <color>#0052415</color>
      </line>
      <line>
          <content>Zaw Than Oo</content>
          <color>red</color>
      </line>
      <line>
          <content>John Smith</content>
          <color>blue</color>
      </line>
      <line>
          <content>CycDemo</content>
          <color></color>
      </line>
  </notic>
</noties>

Complete Package Structure


 

No comments:

Post a Comment

Like us on Facebook