I found this example on wrox website
XML file
=========
<?xml version="1.0"?>
<!DOCTYPE train [
<!ELEMENT train (car*)>
<!ELEMENT car (color, weight, length, occupants)>
<!ATTLIST car type CDATA #IMPLIED>
<!ELEMENT color (#PCDATA)>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT length (#PCDATA)>
<!ELEMENT occupants (#PCDATA)>
]>
<train>
<car type="Engine">
<color>Black</color>
<weight>512 tons</weight>
<length>60 feet</length>
<occupants>3</occupants>
</car>
<car type="Baggage">
<color>Green</color>
<weight>80 tons</weight>
<length>40 feet</length>
<occupants>0</occupants>
</car>
<car type="Dining">
<color>Green and Yellow</color>
<weight>50 tons</weight>
<length>50 feet</length>
<occupants>18</occupants>
</car>
<car type="Passenger">
<color>Green and Yellow</color>
<weight>40 tons</weight>
<length>60 feet</length>
<occupants>23</occupants>
</car>
<car type="Pullman">
<color>Green and Yellow</color>
<weight>50 tons</weight>
<length>60 feet</length>
<occupants>23</occupants>
</car>
<car type="Caboose">
<color>Red</color>
<weight>90 tons</weight>
<length>30 feet</length>
<occupants>4</occupants>
</car>
</train>
TrainReader.java
=================
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class TrainReader extends DefaultHandler
{
private boolean isColor;
private
String trainCarType = "";
private StringBuffer trainCarColor = new StringBuffer();
private Locator trainLocator = null;
public static void main (String[] args)
throws Exception
{
System.out.println("Running train reader...");
TrainReader readerObj = new TrainReader();
readerObj.read(args[0]);
}
public void read(String fileName)
throws Exception
{
XMLReader reader =
XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
reader.setContentHandler (this);
reader.setErrorHandler (this);
try
{
reader.setFeature("http://xml.org/sax/features/validation", true);
}
catch (SAXException e)
{
System.err.println("Cannot activate validation");
}
try
{
reader.parse(fileName);
}
catch (SAXException e)
{
System.out.println("Parsing stopped : " + e.getMessage());
}
}
public void setDocumentLocator(Locator loc)
{
trainLocator = loc;
}
public void startDocument()
throws SAXException
{
System.out.println("Start of the train");
}
public void endDocument()
throws SAXException
{
System.out.println("End of the train");
}
public void startElement(String uri, String localName, String qName, Attributes atts)
throws SAXException
{
if (localName.equals("car")) {
if (atts != null) {
trainCarType = atts.getValue("type");
}
}
if (localName.equals("color"))
{
trainCarColor.setLength(0);
isColor = true;
} else
isColor = false;
}
public void characters(char[] ch, int start, int len)
throws SAXException
{
if (isColor)
{
trainCarColor.append(ch, start, len);
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if (isColor)
{
System.out.println("The color of the " + trainCarType + " car is " +
trainCarColor.toString());
if ((trainCarType.equals("Caboose")) &&
(!trainCarColor.toString().equals("Red")))
{
if (trainLocator != null)
throw new SAXException("The caboose is not red at line " +
trainLocator.getLineNumber() + ", column " +
trainLocator.getColumnNumber() );
else
throw new SAXException("The caboose is not red!");
}
}
isColor = false;
}
public void warning (SAXParseException exception)
throws SAXException {
System.err.println("[Warning] " +
exception.getMessage() + " at line " +
exception.getLineNumber() + ", column " +
exception.getColumnNumber() );
}
public void error (SAXParseException exception)
throws SAXException {
System.err.println("[Error] " +
exception.getMessage() + " at line " +
exception.getLineNumber() + ", column " +
exception.getColumnNumber() );
}
public void fatalError (SAXParseException exception)
throws SAXException {
System.err.println("[Fatal Error] " +
exception.getMessage() + " at line " +
exception.getLineNumber() + ", column " +
exception.getColumnNumber() );
throw exception;
}
}
[ January 26, 2006: Message edited by: Sara James ]