2012-06-04 34 views
3

我有以下的Java方法:如何安靜org.w3c.dom.Document?

private static Document documentFromFile(final File xmlFile) 
{ 
    Document document = null; 
    try 
    { 
     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
      .newInstance(); 
     DocumentBuilder docBuilder = docBuilderFactory 
      .newDocumentBuilder(); 
     document = docBuilder.parse(xmlFile); 
     document.getDocumentElement().normalize(); 
    } 
    catch(Exception exc) 
    { 
     // Handle exception... 
    } 

    return document; 
} 

在我的測試方法,如果我通過這種方法,一個畸形的XML文件,我得到了各種錯誤輸出的我的控制檯上:

[致命錯誤]:1:1:在序言中不允許內容。

[致命錯誤]:1:1:文件過早結束。

我假設罪魁禍首是docBuilder.parse(xmlFile)。我希望能夠禁用此默認輸出,並「靜音」文檔生成器,並且我沒有看到此對象上的任何setter方法,這些方法允許我做這樣的事情。我在這裏有補救措施還是我堅持這個?

+0

DOM操作庫的哪個[實現](http://www.jarfinder.com/index.php/java/info/org.w3c.dom.Document)我們在說什麼?什麼版本? DocumentBuilderFactory有一個setAttribute方法,但您必須知道要設置的屬性名稱。 –

+0

看看是否適用於你:[「如何在java的xpath中運行時禁用dtd?」](http://stackoverflow.com/q/243728/1322198)和[「我如何忽略DTD驗證,但保持Doctype時寫一個XML文件?「](http://stackoverflow.com/q/582352/1322198) –

+0

我正在使用'javax.xml.parsers。*'作爲lib,並且正在使用XSD模式驗證... – IAmYourFaja

回答

3

使用DocumentBuilder.setErrorHandler設置執行ErrorHandler。不要被包名稱弄糊塗。即使它說「org.xml.sax」,它是他們想要的。我想你可以使用DefaultHandler,因爲Javadoc說它會忽略錯誤和警告。如果它仍然過於冗長,則可以提供自己的實現。

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
db.setErrorHandler(new DefaultHandler());