jaxp解析DTD的例子

来源:互联网 发布:淘宝首页怎么添加视频 编辑:程序博客网 时间:2024/06/16 19:06

相信想知道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){}
       }

/**Thefollowing will implement methods in DtdEventListener interface******/
       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...

0 0
原创粉丝点击