编译环境是jdk1.5+xerces-j-2.8
源码为:import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.XMLReaderFactory;
import org.apache.xerces.parsers.*;
public class ParseXMLDTD
{
public void ShowParseResult(String uri)
{
System.out.println("Parse"+"uri"+"File!");
System.out.println("===============================");
ContentHandler Chandler=new ChandlerClass1();
ErrorHandler EHandler=new EHandlerClass1();
DTDHandler DHandler=new DTDHandlerClass1();
try
{
XMLReader MyParser=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
MyParser.setContentHandler(Chandler);
MyParser.setErrorHandler(EHandler);
MyParser.setDTDHandler(DHandler);
MyParser.setFeature("http://xml.org/sax/features/validation",true);
MyParser.parse(uri);
}
catch(IOException e)
{
System.out.println("Error IOException !!!");
}
catch(SAXException e)
{
System.out.println("Error SAXException !!!");
}
}
public static void main(String args[])
{
String uri=args[0];
ParseXMLErrorLog ParseXMLErrorLogInstance=new ParseXMLErrorLog();
ParseXMLErrorLogInstance.ShowParseResult(uri);
}
}
class ChandlerClass1 implements ContentHandler
{
private Locator locator;
public void setDocumentLocator(Locator locator)
{
System.out.println("The Parser called setDocumentLocator()!!!");
this.locator=locator;
System.out.println("===============================");
}
public void startDocument() throws SAXException
{
System.out.println("The Parser called startDocument()!!!");
System.out.println("===============================");
}
public void endDocument() throws SAXException
{
System.out.println("The Parser called endDocument()!!!");
System.out.println("===============================");
}
public void processingInstruction(String target,String data)
{
System.out.println("The Parser called processingInstruction()!!!");
System.out.println("target is {"+target+"}"+"data is {"+data+"}");
System.out.println("===============================");
}
public void startPrefixMapping(String prefix,String uri)
{
System.out.println("The Parser called startPrefixMapping()!!!");
System.out.println("prefix is {"+prefix+"}uri is {"+uri+"}");
System.out.println("===============================");
}
public void endPrefixMapping(String prefix)
{
System.out.println("The Parser called endPrefixMapping()!!!");
System.out.println("prefix is {"+prefix+"}");
System.out.println("===============================");
}
public void startElement(String namespaceURL,String localName,String rawName,Attributes atts) throws SAXException
{
System.out.println("The Parser called startElement()!!!");
if(!namespaceURL.equals(""))
{
System.out.println("nameSpaceURL is {"+namespaceURL+"}"+"rawName is {"+rawName+"}");
}
else
{
System.out.println("There is not namespace");
}
System.out.println("localName is {"+localName+"}");
for(int i=0;i<atts.getLength();i++)
{
System.out.println("Attribute is {"+atts.getLocalName(i)+"}is {"+atts.getValue(i)+"}");
}
System.out.println("===============================");
}
public void endElement(String namespaceURL,String localName,String rawName) throws SAXException
{
System.out.println("The Parser called endElement()!!!");
System.out.println("localName is {"+localName+"}");
System.out.println("===============================");
}
public void characters(char[] ch,int start,int end)
{
String sss=new String(ch,start,end);
System.out.println("The Parser called characters()!!!");
System.out.println("characters is {"+sss+"}");
System.out.println("===============================");
}
public void ignorableWhitespace(char[] ch,int start,int end) throws SAXException
{
String sss=new String(ch,start,end);
System.out.println("The Parser called ignorableWhitespace()!!!");
System.out.println("ignorableWhitespace is {"+sss+"}");
System.out.println("===============================");
}
public void skippedEntity(String name) throws SAXException
{
System.out.println("The Parser called skippedEntity()!!!");
System.out.println("skippedEntity {"+name+"}");
System.out.println("===============================");
}
}
class EHandlerClass1 implements ErrorHandler
{
public void warning(SAXParseException spe) throws SAXException
{
System.out.println("The Parser called warning()!!!!");
System.out.println("Line is "+spe.getLineNumber());
System.out.println("URI is "+spe.getSystemId());
System.out.println("Message is "+spe.getMessage());
System.out.println("===============================");
}
public void error(SAXParseException spe) throws SAXException
{
System.out.println("The Parser called error()!!!!");
System.out.println("Line is "+spe.getLineNumber());
System.out.println("URI is "+spe.getSystemId());
System.out.println("Message is "+spe.getMessage());
System.out.println("===============================");
}
public void fatalError(SAXParseException spe) throws SAXException
{
System.out.println("The Parser called fatalError()!!!!");
System.out.println("Line is "+spe.getLineNumber());
System.out.println("URI is "+spe.getSystemId());
System.out.println("Message is "+spe.getMessage());
System.out.println("===============================");
}
}
class DTDHandlerClass1 implements DTDHandler //声明DTDHandlerClass,此类实现DTDHandler接口
{
public void notationDecl(String name,String publicId,String systemId) throws SAXException
{
//输出符号的相关信息
System.out.println("The Parser called notationDecl()!!!!");
System.out.println("name is "+name);
System.out.println("publicId is "+publicId);
System.out.println("systemId is "+systemId);
System.out.println("===============================");
}
public void unparsedEntityDecl(String name,String publicId,String systemId,String notationName) throws SAXException
{
//输出不可分析实体的相关信息
System.out.println("The Parser called unparsedEntityDecl()!!!!");
System.out.println("name is "+name);
System.out.println("publicId is "+publicId);
System.out.println("systemId is "+systemId);
System.out.println("notationName is "+notationName);
System.out.println("===============================");
}
}
采用的xml文件为:second.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE employee_data [
<!ELEMENT employee_inf (employee_data+)>
<!ELEMENT employee_data (name,age,sex,address,E_mail,photo)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT E_mail (#PCDATA)>
<!ELEMENT Photo EMPTY>
<!NOTATION jpg SYSTEM "C:\windows\system32\mspaint.exe">
<!ENTITY mm_photo SYSTEM "mm_photo.jpg" NDATA jpg>
<!ATTLIST photo picture ENTITY #IMPLIED>
<!ATTLIST photo sw_tool NOTATION (jpg) #IMPLIED>
]>
<employee_inf>
<employee_data>
<name>马连浩</name>
<age>24</age>
<sex>男</sex>
<address>大连交通大学</address>
<E_mail> mlh123caoer@tom.com</E_mail>
<photo picture="mm_photo" sw_tool="jpg"/>
</employee_data>
</employee_inf>
dos输出效果为:
D:\2000>javac ParseXMLDTD.java
D:\2000>java ParseXMLDTD second.xml
ParseuriFile!
===============================
The Parser called setDocumentLocator()!!!
===============================
The Parser called startDocument()!!!
===============================
The Parser called notationDecl()!!!!
name is jpg
publicId is null
systemId is file:///C:/windows/system32/mspa
===============================
The Parser called unparsedEntityDecl()!!!!
name is mm_photo
publicId is null
systemId is file:///D:/2000/mm_photo.jpg
notationName is jpg
===============================
The Parser called startElement()!!!
There is not namespace
localName is {employee_inf}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {employee_data}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {name}
===============================
The Parser called characters()!!!
characters is {马连浩}
===============================
The Parser called endElement()!!!
localName is {name}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {age}
===============================
The Parser called characters()!!!
characters is {24}
===============================
The Parser called endElement()!!!
localName is {age}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {sex}
===============================
The Parser called characters()!!!
characters is {男}
===============================
The Parser called endElement()!!!
localName is {sex}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {address}
===============================
The Parser called characters()!!!
characters is {大连交通大学}
===============================
The Parser called endElement()!!!
localName is {address}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {E_mail}
===============================
The Parser called characters()!!!
characters is { mlh123caoer@tom.com}
===============================
The Parser called endElement()!!!
localName is {E_mail}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called startElement()!!!
There is not namespace
localName is {photo}
Attribute is {picture}is {mm_photo}
Attribute is {sw_tool}is {jpg}
===============================
The Parser called endElement()!!!
localName is {photo}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called endElement()!!!
localName is {employee_data}
===============================
The Parser called ignorableWhitespace()!!!
ignorableWhitespace is {
}
===============================
The Parser called endElement()!!!
localName is {employee_inf}
===============================
The Parser called endDocument()!!!
===============================
设计者:mlhcaoer 邮箱:mlh123caoer@tom.com QQ:215960358
欢迎高手指导
凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。