import javax.xml.parsers.*; import org.xml.sax.XMLReader; import java.io.File; import org.xml.sax.ext.LexicalHandler; import org.xml.sax.ext.DeclHandler; import org.xml.sax.DTDHandler; class SAXdtd { static public void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); SAXParser saxParser = factory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setProperty( "http://xml.org/sax/properties/lexical-handler", new MyLexicalHandler() ); xmlReader.setProperty( "http://xml.org/sax/properties/declaration-handler", new MyDeclHandler() ); xmlReader.setDTDHandler( new MyDTDHandler() ); xmlReader.parse ( new File(args[0]).toURL().toString() ); } } class MyLexicalHandler implements LexicalHandler { public void startDTD(String name, String publicId, String systemId){ System.out.println( "startDTD: \t" + name + ", " + publicId + ", " + systemId ); } public void endDTD(){} public void comment (char[] x, int y, int z){} public void startEntity(String x){} public void endEntity(String x){} public void startCDATA(){} public void endCDATA(){} } class MyDeclHandler implements DeclHandler{ public void attributeDecl(String eName, String aName, String type, String valueDefault, String value){ System.out.println( "attributeDecl: \t" + eName + ", " + aName + ", " + type + ", " + valueDefault + ", " + value ); } public void elementDecl(String name, String model){ System.out.println( "elementDecl: \t" + name + ", " + model ); } public void externalEntityDecl(String name, String publicId, String systemId){ System.out.println( "externalEntityDecl: \t" + name + ", " + publicId + ", " + systemId ); } public void internalEntityDecl(String name, String value){ System.out.println( "internalEntityDecl: \t" + name + ", " + value ); } } class MyDTDHandler implements DTDHandler{ public void notationDecl(String name, String publicId, String systemId){ System.out.println( "notationDecl: \t" + name + ", " + publicId + ", " + systemId ); } public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName){ System.out.println( "unparsedEntityDecl: \t" + name + ", " + publicId + ", " + systemId + ", " + notationName ); } }