XML实体解析器的作用

XML实体解析器的作用

什么是实体解析器

如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上。

从这段文字可以看出来,实体解析器是一个用户自定义的实现,并且注册到sax解析器上即可。

什么情况下需要使用

解析xml文件时,如果声明了publicID和systemId,那么解析器有责任对xml文件进行结构验证。

什么是publicId和systemId

publicId 是一个公共资源的知名标识,解析器可以根据这个名字得到一个资源(一般是DTD),如果根据这个名字没能找到一个资源,那么会根据systemId(一般是一个URL)来获取这个资源,如果还获取不到,那么会报错。也就是说,publicId和systemId是一个网络资源的标识,前者标识名字,后者标识URL,一般是成对出现。

解析器获取publicId标识的资源,一般是通过网络下载,这会导致解析速度变慢,或者解析失败。因此,可以通过提供一个实体解析器,在实体解析器中控制器资源的获取,比如改成从本地查找,那么效率会提升很多。

EntityResolver有如下方法,用来根据publicId和SystemId得到一个资源。

 public abstract InputSource resolveEntity (String publicId,
                                               String systemId)

posted on 2017-01-19 23:15  HuMingChuan  阅读(777)  评论(0编辑  收藏  举报

导航