2013-04-26 60 views
5

我試圖驗證使用Xerces-J的XML文檔。使用Xerces-j驗證XML文檔

我希望驗證器能夠拾取和解析任何關聯的XSD或DTD文件(使用schemalocation,nonamespaceschemalocationa和DOCTYPE引用)。看來這些資源的加載可以委託給一個Resolver類。

但是我見過的所有示例都是從模式創建一個驗證器。

是否有可能反過來讓xerces驗證XML文檔,並讓它加載所需的內容,或者必須首先解析XML文件以查找模式引用,加載它們,然後創建一個模式驗證器?

在一個理想世界的驗證也將支持XSD 1.1

回答

3

您提供一個解析器與EntityResolver的仰視<!DOCTYPE聲明或架構屬性時使用。最常見的實體解析器使用目錄文件,這本質上是XML文件或文本文件,它們定義了公共ID,系統ID和物理文件URI的字典。請參閱org.apache.xml.resolver包。但是你也可以提供你自己的EntityResolver實現。

CatalogResolver resolver = new CatalogResolver(); 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setValidating(true); 
dbf.setFeature("http://apache.org/xml/features/validation/dynamic", true); 
DocumentBuilder parser = dbf.newDocumentBuilder(); 
parser.setEntityResolver(resolver); 
Document doc = parser.parse(someFile);