2008-08-28 99 views
1

大多數XML解析器將在文檔中的第一個錯誤後放棄。事實上,IIRC,這實際上是解析器的「官方」規範的一部分。XML解析器驗證報告

我正在尋找一些能夠打破這個規則的東西。它應該採用給定的模式(假設一個有效的模式)和一個xml輸入,並嘗試在第一個錯誤之後繼續前進,併爲每個錯誤引發一個事件或者在完成時返回一個列表,以便我可以使用它來生成某種報告文件中的錯誤。這個要求來自上面,所以讓我們儘量保持純粹主義者「但是繼續」評論到最低限度是沒有意義的。

我正在尋找的東西,將評估文檔是否格式良好是否符合架構。理想情況下,它將評估那些不同類別的錯誤。我更喜歡.Net解決方案,但我也可以使用獨立的.exe。如果您知道使用其他平臺的人,請繼續併發布它,因爲其他人可能會覺得它有用。

更新:

我預計大多數地方我使用這個文件將是大多形成良好。也許是&作爲數據而不是& amp在這裏或那裏,或偶爾錯誤的標記。我不希望解析器能夠從任何東西中恢復,只是爲了盡最大努力繼續前進。如果一份文件太過於失敗,它應該儘可能多地吐出一些「致命的,無法繼續」的錯誤。否則,架構驗證部分非常簡單。

回答

1

In fact, IIRC, that's actually part of the 'official' spec for parsers.

官方並不需要被引用:)

fatal error

[Definition:] An error which a conforming XML processor must detect and report to the application. After encountering a fatal error, the processor may continue processing the data to search for further errors and may report such errors to the application. In order to support correction of errors, the processor may make unprocessed data from the document (with intermingled character data and markup) available to the application. Once a fatal error is detected, however, the processor must not continue normal processing (i.e., it must not continue to pass character data and information about the document's logical structure to the application in the normal way).

你可以使用xmllint與恢復選項。

1

聽起來像你可能想要TagSoup。它可能並不是你想要的,但就壞文檔處理解析器而言,這是金標準。

1

Xercesfeature您可以設置,試圖繼續致命錯誤後:

http://apache.org/xml/features/continue-after-fatal-error
True: Attempt to continue parsing after a fatal error.
False: Stops parse on first fatal error.
Default: false
Note: The behavior of the parser when this feature is set to true is undetermined! Therefore use this feature with extreme caution because the parser may get stuck in an infinite loop or worse.