所以說,我有一個XML文件,它看起來像這樣:的Java XML SAX錯誤處理
<foo>
<bar></bar>
<bar></bar>
<bar></bar>
...
<bar></bar>
</foo>
我的目標是針對DTD確認每個欄標籤。爲了簡單起見,可以說對於通過DTD驗證的每個條節點,程序輸出「true」,並且每個條形節點都會失敗,輸出「fail」
使用SAX解析器我該如何實現?
謝謝!
所以說,我有一個XML文件,它看起來像這樣:的Java XML SAX錯誤處理
<foo>
<bar></bar>
<bar></bar>
<bar></bar>
...
<bar></bar>
</foo>
我的目標是針對DTD確認每個欄標籤。爲了簡單起見,可以說對於通過DTD驗證的每個條節點,程序輸出「true」,並且每個條形節點都會失敗,輸出「fail」
使用SAX解析器我該如何實現?
謝謝!
使用驗證SAX解析器並確保在org.xml.sax.XMLReader上設置org.xml.sax.ErrorHandler。的ErrorHandler是你可以用3種方法實現一個接口:
如果您的ErrorHandler的實現拋出這些方法解析的異常將停止。另一方面,您可以捕獲SAXParseException將其存儲在集合中,並從ErrorHandler方法中簡單地返回,並且解析將繼續。解析完成後,您可以檢查ErrorHandler的實現以瞭解存儲的異常。
SAXParseException包含有用的信息,例如錯誤發生位置的列/行號。
+1 - 好主意,我會牢記的! – 2010-08-20 14:08:05
我使用了這種變化,謝謝 – Shawn 2010-08-20 15:04:52
棘手,因爲(驗證)標準XML解析器將停止在第一個驗證錯誤。日蝕XML編輯器是不同的,它顯示所有的驗證錯誤,但這並不容易它提取並在eclipse框架外使用它...
試試這個:解析整個文檔與一個不驗證的SAX解析器並將每個bar元素提供給第二個驗證解析器。您需要第二個解析器的派生dtd,因爲它會看到一個名爲bar的根元素。這應該爲條元素提供驗證結果。
薩克斯解析器已經做到了這一點 - 你想要做什麼 – Mark 2010-08-20 13:19:04
創建兩個XML文件;通過的酒吧節點之一和失敗的酒吧節點之一。 – Shawn 2010-08-20 13:20:21
@Mark - 驗證的sax解析器將在第一個錯誤(AFIAK)上停止 – 2010-08-20 13:20:39