我正在尋找一種方法來根據內部模式驗證我的XML文件。目前這是我的代碼。使用內部架構驗證XML返回一個布爾值
final SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SAXParser parser;
parser = factory.newSAXParser();
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
final XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new SAXErrorHandler());
reader.parse(new InputSource(doc));
那麼它的作用是報告驗證錯誤,如果它是非致命錯誤和解析可以繼續警告。這很好,因爲我可以看到更多的錯誤,如果它只是打破並引發異常。
但是它不確實正在代碼中的可用信息給我,讓我可以有一個方法boolean validate()
返回是否存在或不存在錯誤(警告)
所以我想到了一個自己的實例ErrorHandler的屬性,我可以搶在解析完成後,但這聽起來對我來說並不酷:)
接下來的事情是解析這樣的解析需要一些時間,只需使用驗證器可以顯着更快(和是這是時間關鍵;)),但因爲我需要內部模式進行驗證,所以我不知道如何完全解析。
我經過這裏的SO各種問題,所有建議哪些需要外接方案Validator類閱讀。也許我錯了,但我認爲Validator並不像解析器那樣構建完整的DOM樹,因此速度更快。 我希望能找到比自定義的ErrorHandler更流暢的東西,但我會試一試;)。感謝您的回答。 –
@DennisIch - SAX解析器根本不構建DOM樹。它所做的只是將事件傳遞給處理程序。 – jtahlborn
很高興知道,謝謝你在這裏的幫助。 –