5

我正在尝试使用 Xerces-J 验证 XML 文档。

我希望验证器获取并解析任何关联的 XSD 或 DTD 文件(使用 schemalocation、nonamespaceschemalocationa 和 DOCTYPE 引用)。似乎这些资源的加载可以委托给 Resolver 类。

然而,我看到的所有示例都是从模式创建验证器开始的。

是否可以反过来驱动这个,要求 xerces 验证 XML 文档,并让它加载它需要的内容,或者我必须首先解析 XML 文件以查找模式引用,加载它们,然后从模式创建验证器?

在理想情况下,验证器也将支持 xsd 1.1

4

1 回答 1

3

在查找 <!DOCTYPE 声明或架构属性时,您可以为解析器提供一个 EntityResolver 使用。最常见的实体解析器使用目录文件,这些文件本质上是 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);
于 2013-08-22T16:35:43.710 回答