2011-11-11 26 views
5

Tôi cần phải phân tích cú pháp một loạt các tài liệu XML đến nhưng nó không chứa khai báo DTD. Hiện tại tôi đang phân tích cú pháp tài liệu xml bằng SAX Parser nhưng không có xác thực DTD. Bây giờ tôi muốn áp dụng xác nhận DTD. DTD được tạo ra bởi chính tôi. Làm cách nào tôi có thể xác thực tệp XML bằng DTD do chính tôi tạo (trình phân tích SAX)? Tôi tìm thấy một số hướng dẫn sử dụng Transformer nhưng tất cả cho DOM Parser.Làm cách nào để áp dụng xác thực tệp DTD cục bộ vào tệp xml trong java?

Cách phân tích tệp XML bằng Trình phân tích SAX và cũng áp dụng xác thực DTD. Bất kỳ sự giúp đỡ ....

Trả lời

2

Dưới đây là một ví dụ mà tôi tin rằng có thể giúp đỡ để làm những gì bạn muốn:

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 (true); dòng cho Parserconfigurationexception trong android và đưa ra cảnh báo rằng không thực hiện xác nhận được hỗ trợ. Nó hoạt động trong java nhưng không có trong android. Có phương pháp nào khác để xác thực dtd trong android không? –

+0

@Mdroid, xin lỗi, có lẽ tôi đã bỏ lỡ thẻ "android". Câu hỏi chính nó không nói rằng đó là về nền tảng Android. Bạn đã giải quyết vấn đề chưa? –

+0

Xin lỗi tôi đã không đề cập đến "nền tảng Android" được đề cập đến. Và hiện tại tôi không còn làm việc gì nữa. –

Các vấn đề liên quan