JAXP:如何根据XML Schema验证org.w3c.dom.Document?

8
如何使用JAXP验证已解析的org.w3c.dom.Document与XML Schema的匹配性?
1个回答

13
你可以使用javax.xml.validation API完成此操作。
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
URL schemaURL = // The URL to your XML Schema; 
Schema schema = sf.newSchema(schemaURL); 
Validator validator = schema.newValidator();
DOMSource source = new DOMSource(xmlDOM);
validator.validate(source);

下面的示例演示了如何针对模式验证JAXB对象模型,但您将看到可以轻松将JAXBSource替换为DOMSource进行DOM:


谢谢Blaise。虽然不是直接相关于这个问题,但我想问你另外一个问题:如果指定的模式(已通过StreamSource传递给SchemaFactory)包括另一个仅作为ClassLoader资源可用的模式,该怎么办?不幸的是,传递两个StreamSource并没有起作用。 - MRalwasser
2
@MRalwasser - 请查看 SchemaFactory.setResourceResolver。 javadocs 中有各种有用的信息... - jtahlborn
@jtahlbborn:谢谢,这个方法可行。不过:当以这种方式验证文档时,似乎模式的默认值不被尊重,文档和其节点保持不变。 - MRalwasser
@MRalwasser - 要使DOM受模式影响,您需要在解析XML为DOM之前,在用于创建解析器的DocumentBuilderFactory上设置模式。 - bdoughan
很遗憾,我只能在解析XML之后才知道模式位置(或者是否有像ResourceResolver/EntityResolver这样的东西来定义XML中根模式?因为我想传递一个类加载器资源流)。 - MRalwasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接