天天看點

jaxp解析DTD的例子

相信想知道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...