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)