XML實體解析器的作用 什麼是實體解析器 如果一個sax解析器需要實現對外部實體的自定義處理,那麼必須實現一個EntityResolver介面並且註冊到SAX驅動上。 從這段文字可以看出來,實體解析器是一個用戶自定義的實現,並且註冊到sax解析器上即可。 什麼情況下需要使用 解析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)