使用Xerces-j验证XML文档

时间:2013-04-26 14:26:41

标签: xml xsd sax xsd-validation xerces2-j

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

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

然而,我见过的所有样本都是从模式创建验证器开始的。

是否有可能以相反的方式驱动它,请xerces验证XML文档,并让它加载它需要的东西,或者我必须首先解析XML文件寻找模式引用,加载它们,然后创建验证器来自架构?

在理想的世界中,验证器也支持xsd 1.1

1 个答案:

答案 0 :(得分: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);