相信想知道jaxp包如何进行DTD解析的人,看了这个简单例子就明白了。 1:类DTDTest源程序; 2:用于测试的DTD文档:boolk-order.dtd; 3:程序输出结果。
至于包,可从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 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 (StringelementName,StringattributeName,StringattributeType,String options [],StringdefaultValue,Boolean isFixed,booleanisRequired)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:UNKNOWNNow begin to doexternalDtdDecl! syutemId:file:book-order.dtdNow show elementDecl! elementName:Order contentModel:(Customer,Receipt)Now show attributeDecl! elementName: Order attributeName: xmlns attributeType: CDATA defaultValue:http://www.example.com/myschema.xmlNow 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,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,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... (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|