使用本地dtd通过本地xml和dtd文件传递xml验证

时间:2014-08-05 07:30:39

标签: java xml validation dtd xml-dtd

我找到了很多像这样的例子:

    public static boolean validateXMLSchema(String xsdPath, String xmlPath){

        try {
            SchemaFactory factory =
                    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdPath));
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlPath)));
        } catch (IOException | SAXException e) {
            System.out.println("Exception: "+e.getMessage());
            return false;
        }
        return true;
    }
}

展示如何通过xsd验证xml文件,我发现用dtd文件做同样的事情并不容易。我有一堆xml文件使用不同类型的dtd(dtd文件在另一个位置),格式为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE name SYSTEM "name.dtd">
<name>

  .
  .
  .

</name>

我应该如何使用dtd(传递本地xml和dtd路径)验证,与上面的示例类似?

1 个答案:

答案 0 :(得分:0)

如果您使用SAX解析器,您可能需要查看org.xml.sax.EntityResolver接口。您创建了一个实现此接口的类,并在.setEntityResolver(yourResolver)上调用XMLReader。如果DTD可用,大多数SAX解析器将自动验证您的XML,否则您可能必须将validation功能设置为true