开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

利用SAX和Java分解常用的XML实体
作者: ZDNet China
2003-12-25 11:59:33



本文译自Builder.com,未经许可请勿转载

可以看到,XML文档和它们的不同版本的原理性的书籍都采用自身的风格。这些自身风格有时候也会成为绊脚石,你不得不以摘要和重用的方式来描述它们。其中一个解决方法是使用通用的XML实体来描述普通的、可重用的XML成分。

XML实体

实体是一个不明确的词语,它被使用于程序中以代表XML文档中一个自定义的特定的种类。

一个实体与XML文档中被命名的数据有关。你应该已经熟悉一些实体,比如&amp(这一个实体代表着一个记号名称)。如果使用不当,这一实体将会产生一系列的问题。

分解实体

XML实体的分类有三种,如表A所示。实体通过使用“实体引用(entity references)”与XML文档相联系,也就是使用基本记号&,然后在其后面跟随着实体名称,接着是一个分号(;)。在以上的范例中,我们引用了&记号作为一个实体──实体的名称为amp,及它所指的数据是一个记号字符。

 

TABLE A: Entity categorizations

 Parsed   Unparsed;

 Internal Extemal;

 General  Parameter;

 

 

 

 

 

 

 

XML分解器将尽可能地将实体引用分解到它们置换的文本。这一过程的其中一部分使用DTD来查找内部实体的定义。你的实体很有可能没有被定义,但已经在DTD中被引用,如果这样,它们都属于外部实体。当SAX分解文档时,它们需要分解这些外部实体,你也可以使用EntityResolver界面来截取这一过程。

EntityResolver

EntityResolver界面非常简单,并且很容易使用。界面包括一个名为resolveEntity的简单方法,其包含两个参数:公用的标识符(identifier)和系统标识符。这些标识符可以通过DTD中的实体定义而提供,如表A中的范例所示。

表A: entity.dtd
<!ENTITY MyCustomEntity
         PUBLIC "-//Builder.com//TEXT MyCustomEntity//EN"
         "http://www.builder.com/xml/entities/MyCustomEntity">

<!ELEMENTCustomEntity (#PCDATA)>
<!ELEMENT Entity (CustomEntity)>

 

范例中的XML文档可参见于表B。这一文档说明了DTD用于校验的用法,并显示将MyCustomEntity作为CustomEntity成分的值。

表B: entity.xml
<?xml version="1.0" ?>
<!DOCTYPE entity SYSTEM "entity.dtd">
<Entity>
  <CustomEntity>&MyCustomEntity;</CustomEntity>
 </Entity>

为了使用通用的解答器(resolver)来处理这一实体,我们需要编写一个SAX分解器,SAX分解器的一个句柄,以及一个EntityResolver。EntityResolver类包含在表C中。

表C:CustomResolver.java
import java.io.StringReader;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;

public class CustomResolver implements EntityResolver {
  public InputSourceresolveEntity (String publicId, String systemId) {
    StringReaderstrReader = new StringReader("This is a custom
 entity");
    if
(systemId.equals("http://www.builder.com/xml/entities/MyCus
tomEntity")) {
       System.out.println("Resolving entity: " + publicId);
       return new InputSource(strReader);
     } else {
       return null;
     }
   }
 }

【下一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号