LexicalHandler Example
import org.xml.sax.*;
import org.xml.sax.ext.*;
import org.xml.sax.helpers.*;
import java.io.IOException;
public class SAXCommentReader implements LexicalHandler {
public void startDTD(String name, String publicId, String systemId)
throws SAXException {}
public void endDTD() throws SAXException {}
public void startEntity(String name) throws SAXException {}
public void endEntity(String name) throws SAXException {}
public void startCDATA() throws SAXException {}
public void endCDATA() throws SAXException {}
public void comment (char[] text, int start, int length)
throws SAXException {
String comment = new String(text, start, length);
System.out.println(comment);
}
public static void main(String[] args) {
// set up the parser
XMLReader parser;
try {
parser = XMLReaderFactory.createXMLReader();
}
catch (SAXException e) {
try {
parser = XMLReaderFactory.createXMLReader(
"org.apache.xerces.parsers.SAXParser");
}
catch (SAXException e2) {
System.err.println("Error: could not locate a parser.");
return;
}
}
// turn on comment handling
try {
parser.setProperty(
"http://xml.org/sax/properties/lexical-handler",
new SAXCommentReader()
);
}
catch (SAXNotRecognizedException e) {
System.err.println(
"Installed XML parser does not provide lexical events...");
return;
}
catch (SAXNotSupportedException e) {
System.err.println(
"Cannot turn on comment processing here");
return;
}
if (args.length == 0) {
System.out.println("Usage: java SAXCommentReader URL1 URL2...");
}
// start parsing...
for (int i = 0; i < args.length; i++) {
try {
parser.parse(args[i]);
}
catch (SAXParseException e) { // well-formedness error
System.out.println(args[i] + " is not well formed.");
System.out.println(e.getMessage()
+ " at line " + e.getLineNumber()
+ ", column " + e.getColumnNumber());
}
catch (SAXException e) { // some other kind of error
System.out.println(e.getMessage());
}
catch (IOException e) {
System.out.println("Could not check " + args[i]
+ " because of the IOException " + e);
}
}
}
}