2011-11-11 44 views
5

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

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

回答

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; 
    } 
} 
+0

parserFactory.setValidating(真);行在android中给出Parserconfigurationexception,并给出警告,说明不支持验证的实现。它在java中工作,但不在android中。有没有其他的方法可以在android中进行dtd验证? –

+0

@Mdroid,对不起,可能我错过了“android”标签。这个问题本身并没有说它是关于android平台的。你解决了这个问题吗? –

+0

对不起,我没有问题提到“Android平台”。目前我没有更多的工作。 –