jaxp解析DTD的例子

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇