相信想知道jaxp包如何進行DTD解析的人,看了這個簡單例子就明白了。
1:類DTDTest源程式;
2:用于測試的DTD文檔:boolk-order.dtd;
3:程式輸出結果。
至于jaxp包,可從sun的網站得到。
1:DTDTest.java:
importorg.xml.sax.InputSource;
importcom.sun.xml.parser.Parser;
importjava.io.*;
importorg.xml.sax.*;
importcom.sun.xml.parser.DtdEventListener;
publicclass DTDTest implements DtdEventListener{
private Parser parser;
private String dtdSource;
private InputSource buf;
public DTDTest(){
parser=new Parser();
parser.setDTDHandler(this);
File f=newFile("file:book-order.dtd");
dtdSource=f.getPath();
byte[]data=("<!DOCTYPE UNKNOWN SYSTEM\""+dtdSource+"\"> <x />").getBytes();
buf=newInputSource(new ByteArrayInputStream(data));
Stringparent=f.getParent();
if(parent==null)parent=".\\";
buf.setSystemId(parent);
}
public void parse() throws Exception{
parser.parse(buf);
}
public static void main(String args[]){
DTDTest dtdtest=newDTDTest();
try {dtdtest.parse();}
catch (Exception e){}
}
public void notationDecl(String name,StringpublicId,String systemId){}
public void unparsedEntityDecl(Stringname,String publicId,String systemId,String notationName){}
public void startDtd (String rootName) throwsSAXException{
System.out.println("Now begin to start to parse DTD File!");
if (rootName!=null)System.out.println("rootName: "+rootName);
System.out.println("");
}
public void externalDtdDecl (String publicId,String systemId) throws SAXException{
System.out.println("Now begin to do externalDtdDecl!");
if (publicId!=null)System.out.println("publicId: "+publicId);
if (systemId!=null)System.out.println("syutemId: "+systemId);
System.out.println("");
}
public void internalDtdDecl (StringinternalSubset) throws SAXException{
System.out.println("Nowshow internalDtdDecl!");
if(internalSubset!=null) System.out.println("internalSubset: "+internalSubset);
System.out.println("");
}
public void internalEntityDecl (String name,String value) throws SAXException
{
System.out.println("Nowshow internalEntityDecl!");
if(name!=null) System.out.println("name: "+name);
if (value!=null)System.out.println("value: "+value);
System.out.println("");
}
public void externalEntityDecl (Stringname,String publicId, String systemId) throws SAXException{
System.out.println("Nowshow externalEntityDecl!");
if(name!=null) System.out.println("name: "+name);
if(publicId!=null) System.out.println("publicId: "+publicId);
if(systemId!=null) System.out.println("systemId: "+systemId);
System.out.println("");
}
public void elementDecl (String elementName,String contentModel) throws SAXException{
System.out.println("Nowshow elementDecl!");
if(elementName!=null) System.out.println("elementName: "+elementName);
if(contentModel!=null) System.out.println("contentModel:"+contentModel);
System.out.println("");
}
public void attributeDecl (String elementName,StringattributeName, String attributeType,String options [],String defaultValue,Boolean isFixed, boolean isRequired)throws SAXException{
System.out.println("Now show attributeDecl!");
if(elementName!=null) System.out.println("elementName: "+elementName);
if (attributeName!=null)System.out.println("attributeName:"+attributeName);
if (attributeType!=null)System.out.println("attributeType:"+attributeType);
if (defaultValue!=null)System.out.println("defaultValue:"+defaultValue);
if (options!=null) {
System.out.println("attribute value options:");
for (int i=0;i<options.length;i++)System.out.println(options[i]);
}
System.out.println("");
}
public void endDtd () throws SAXException{
System.out.println("parse DTDFile is end!");
System.out.println("bye-bye");
}
}
2:book-order.dtd:
<!ELEMENT Order (Customer,Manifest,Receipt)>
<!ATTLIST Order xmlns CDATA #FIXED"http://www.example.com/myschema.xml">
<!ELEMENT Customer (Name, Cardnum)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Cardnum (#PCDATA)>
<!ELEMENT Manifest (Item*)>
<!ELEMENT Item (ID,Title,Quantity,UnitPrice)>
<!ELEMENT ID (#PCDATA)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Quantity (#PCDATA)>
<!ELEMENT UnitPrice (#PCDATA)>
<!ELEMENT Receipt (Subtotal,Tax,Total)>
<!ELEMENT Subtotal (#PCDATA)>
<!ELEMENT Tax (#PCDATA)>
<!ELEMENT Total (#PCDATA)>
3: 程式輸出結果:
Nowbegin to start to parse DTD File! rootName: UNKNOWN Now begin to
doexternalDtdDecl! syutemId: file:book-order.dtd Now show elementDecl!
elementName:Order contentModel: (Customer,Manifest,Receipt) Now show
attributeDecl!
elementName: Order attributeName: xmlns attributeType: CDATA
defaultValue: http://www.example.com/myschema.xml Now showelementDecl!
elementName:Customer contentModel: (Name,Cardnum) Now showelementDecl!
elementName: Name
contentModel: (#PCDATA) Now show elementDecl! elementName: Cardnum
contentModel: (#PCDATA) Now show elementDecl! elementName: Manifest
contentModel: (Item*) Nowshow elementDecl! elementName: Item
contentModel: (ID,Title,Quantity,UnitPrice) Nowshow elementDecl!
elementName: ID contentModel: (#PCDATA) Now show elementDecl!
elementName: Title contentModel: (#PCDATA) Now showelementDecl!
elementName: Quantity contentModel: (#PCDATA) Now showelementDecl!
elementName: UnitPrice contentModel: (#PCDATA) Now show elementDecl!
elementName: Receipt contentModel: (Subtotal,Tax,Total) Now show
elementDecl!elementName:
SubtotalcontentModel: (#PCDATA) Now show elementDecl!
elementName: TaxcontentModel: (#PCDATA) Now showelementDecl!
elementName: Total contentModel: (#PCDATA)
parseDTDFile is end!
bye-bye
ProcessExit...