2012-09-18 49 views
0

我正在使用libxml2庫來解析發送給我(我的程序)的XML作爲另一個程序中的文件。小心這應該意味着我永遠不會弄壞XML,但是我已經兩次做了手動調整,破壞了接收文件中的XML。我的意思是說,元素有錯誤,結束標籤不匹配開始標籤,標籤之間的隨機字符等。xmlReadFile()(C++ Ubuntu)在破損的XML上進行核心轉儲

該文件很小,因此沒有特別的內存方面的問題,無法將其全部加載到解析器中,所以我使用xmlReadFile()來讀取文檔。

當XML被破壞時,我的問題就來了。 xmlReadFile()會執行一個abend和核心轉儲。我無法抓住它,也沒有設置標誌來「恢復」工作。

我已經看過谷歌,並取得了最小的成功。我找到了xmllint,但是我真的不想在每次獲取新的XML文件時都要調用system()或popen()。我查看了DTD,但似乎無法弄清楚如何告訴DTD實際驗證a中傳遞的值。 (文檔中的許多標籤的值都是一組5個可能的答案中的一個。)當然,如果DTD起作用,我至少不會崩潰xmlReadFile()。

有關如何在xmlReadFile()或xmlReadFile()之前驗證XML以及如何防止崩潰的任何建議? xmllint是否有我剛纔找不到的C++接口?

沒有提升。沒有改變圖書館。

回答

1

你試過xmlReaderForFile(... XML_PARSE_RECOVER ...)

+0

在此工作。將回報。經理出現在他這個熱門新領域。 BBL。 –