2010-08-20 74 views
2

所以說,我有一個XML文件,它看起來像這樣:的Java XML SAX錯誤處理

<foo> 
<bar></bar> 
<bar></bar> 
<bar></bar> 
... 
<bar></bar> 
</foo> 

我的目標是針對DTD確認每個欄標籤。爲了簡單起見,可以說對於通過DTD驗證的每個條節點,程序輸出「true」,並且每個條形節點都會失敗,輸出「fail」

使用SAX解析器我該如何實現?

謝謝!

+0

薩克斯解析器已經做到了這一點 - 你想要做什麼 – Mark 2010-08-20 13:19:04

+0

創建兩個XML文件;通過的酒吧節點之一和失敗的酒吧節點之一。 – Shawn 2010-08-20 13:20:21

+0

@Mark - 驗證的sax解析器將在第一個錯誤(AFIAK)上停止 – 2010-08-20 13:20:39

回答

4

使用驗證SAX解析器並確保在org.xml.sax.XMLReader上設置org.xml.sax.ErrorHandler。的ErrorHandler是你可以用3種方法實現一個接口:

  • 警告(的SAXParseException除外)
  • 錯誤(的SAXParseException除外)
  • fatalError(的SAXParseException除外)

如果您的ErrorHandler的實現拋出這些方法解析的異常將停止。另一方面,您可以捕獲SAXParseException將其存儲在集合中,並從ErrorHandler方法中簡單地返回,並且解析將繼續。解析完成後,您可以檢查ErrorHandler的實現以瞭解存儲的異常。

SAXParseException包含有用的信息,例如錯誤發生位置的列/行號。

+0

+1 - 好主意,我會牢記的! – 2010-08-20 14:08:05

+0

我使用了這種變化,謝謝 – Shawn 2010-08-20 15:04:52

0

棘手,因爲(驗證)標準XML解析器將停止在第一個驗證錯誤。日蝕XML編輯器是不同的,它顯示所有的驗證錯誤,但這並不容易它提取並在eclipse框架外使用它...

試試這個:解析整個文檔與一個不驗證的SAX解析器並將每個bar元素提供給第二個驗證解析器。您需要第二個解析器的派生dtd,因爲它會看到一個名爲bar的根元素。這應該爲條元素提供驗證結果。