如何将本地DTD文件的验证应用于java中的xml文件?

时间:2011-11-11 08:44:53

标签: java android xml dtd saxparser

我需要解析一堆传入的XML文档,但它不包含DTD声明。目前我正在使用SAX Parser解析xml文档但没有DTD验证。现在我想应用DTD验证。 DTD由我自己创建。如何使用自己创建的DTD(SAX解析器)验证XML文件?我找到了一些使用Transformer的教程,但都是针对DOM Parser的。

如何使用SAX Parser解析XML文件并应用DTD验证。 任何帮助....

1 个答案:

答案 0 :(得分:2)

以下是我认为可以帮助您做到所需的示例:

private void loadXML(Reader reader) throws ParserConfigurationException, SAXException {
    SAXParserFactory parserFactory = SAXParserFactory.newInstance();
    parserFactory.setValidating(true);
    SAXParser parser = parserFactory.newSAXParser();
    parser.parse(new InputSource(reader), new MyHandler());
}

private static class MyHandler
        extends DefaultHandler {

    private static final String PREFS_DTD_URI = "http://www.example.com/dtd/document.dtd";

    public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
        if (systemId.equals(PREFS_DTD_URI)) {
            InputSource is = new InputSource(new StringReader(PREFS_DTD));  // PREFS_DTD is a string containing actual DTD, any other Reader could be here
            is.setSystemId(PREFS_DTD_URI);
            return is;
        }
        // else use the default behaviour
        return null;
    }
}