转贴自赛迪网(
http://tech.ccidnet.com/art/294/20021120/31320_2.html)
如果一个XML文档符合上述文档所表现出来的一些特征,即可称之为良构的XML文档。这些特征如下:
1. 每个元素必须有起始和结束标记;
2. 文档只有一个根元素;
3. 正确地对空元素进行格式化;
4. 开始和结束标注必须匹配(区分大小写);
5. 元素必须正确地嵌套;
6. 属性值必须用引号括起来。
IsXMLAvailable.java 是用于进行XML文档良构检验的Java程序,代码如下:
//IsXMLAvailable.java
import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class IsXMLAvailable{
public static void main(String argv[]){
if (argv.length!=1){
System.out.println("参数错误!");
System.exit(1);
}
try{
//取得工厂类的一个新实例
DocumentBuilderFactory dbf=
DocumentBuilderFactory.newInstance();
//通过静态方法创建DocumentBuilder 实例
//准备建立Document 对象
DocumentBuilder db=dbf.newDocumentBuilder();
//建立XML 文档对象
Document doc=db.parse(new File(argv[0]));
//格式化文档
doc.getDocumentElement().normalize();
System.out.println("XML 文件结构正确!");
}
catch(SAXParseException e){
//错误提示,SystemID 为全路径的文件名
System.out.println("XML 在第" +
e.getLineNumber()+"行出错异常,文件信息:"+e.getSystemId());
System.out.println("\n"+e.getMessage());
}
catch(SAXException ex){
ex.printStackTrace();
}
catch(Throwable th){
th.printStackTrace();
}
}
} |
运行“java IsXMLAvailable People.xml”命令,如程序出错,则显示第几行有错,并给出可能的错误提示;如程序正确,则显示 “XML 文件结构正确!”
建立一个有效的XML 文档(DTD)及验证的实例良好的XML 文档只说明了其语法正确,并没有解决语义问题。XML 描述了有一定含义的数据,其中可以指定包含数据的规则。通过这种指定的规则,可以验证已声明符合规则的XML 文档的有效性,即DTD——文档类型定义。
DTD 可以确保应用程序接收到一个有效的XML 文档,然后可以针对某一类XML 设计出应用程序接口。这样符合某种DTD 的XML 文档都可以被应用程序解析,也可以用DTD 制定自己的文档规则,而这个规则可被其它应用程序利用。DTD 有两种方法声明XML文件:
(1) 外部 DTD 声明如下:
<!DOCTYPE peopleinfo SYSTEM "People.dtd"> |
(2) 内部 DTD 声明(PeopleDTD.xml)如下:
<? xml version="1.0" encoding="GB2312"?>
<! DOCTYPE PeopleInfo[
<! ELEMENT PeopleInfo(People+)>
<!ELEMENT People(Peoplename, PeopleSex,PeopleAge)>
<! ELEMENT PeopleName(#PCDATA)>
<! ELEMENT PeopleSex(#PCDATA)>
<! ELEMENT PeopleAge(#PCDATA)>
<! ATTLIST People PeopleId CDATA #REQUIRED>
]>
<PeopleInfo>
<People PeopleId="YOUR">
<PeopleName> 古董 </PeopleName>
<PeopleSex> 男 </PeopleSex>
<PeopleAge> 23 </PeopleAge>
</People>
<People PeopleId="SHEN">
<PeopleName> 王冠 </PeopleName>
<PeopleSex> 女 </PeopleSex>
<PeopleAge> 25 </PeopleAge>
</People>
</PeopleInfo> |
从上面的文件可以看到内嵌的DTD 在
<! DOCTYPE> 标记中。首先声明的是XML 文档的根元素
<PeopleInfo>,然后指明在
<PeopleInfo>根元素中必须包含有一个或是多个的
<People>元素(用People+ 表示)。下一句定义了在
<People>元素中必须包含
<PeopleName>、<PeopleSex>和<PeopleAge>3个元素。这3个元素的内容类型为#PCDATA,表示内容为文本类型。然后是对属性的定义,表示PeopleInfo 必须含有PeopleId 属性。#REQUIRED(必须含有)默认的可以省略,CDATA 表示属性值是字符串型。
要检验一个XML 文件是否有效需要在解析XML 文件时检验其是否有效。首先在创建DocumentBuilder 对象之前,利用语句设置有效性检验,语句如下:
dbf.setValidating(true);//设置对XML 文件进行有效验证 |
因为SAX 在解析XML 文件时,遇到不符合DTD规定的地方要触发相应的事件,所以还要在程序中定义实现了事件接口的类。在这里用的是常用的处理事件的静态内部类,在此类中必须实现的方法语句如下:
public void warning(SAXParseException spe) throws SAXExcepton
public void error(SAXParseException spe) throws SAXExcepton
public void fatalError(SAXParseException spe) throws SAXExcepton |
不同级别的错误事件将分别触发这3个方法中的一个。
在IsXMLAvailableDTD.java 中,提供了对XML 文档进行有效性检验的源程序。从中可以看到SAX事件驱动的解析XML程序的编写方式http:。
posted on 2006-11-22 17:21
英明 阅读(213)
评论(0) 编辑 收藏 所属分类:
编程