xmlReadFile()(C ++ Ubuntu)核心转储在破碎的XML上

时间:2012-09-18 12:01:33

标签: c++ xml dtd libxml2 xml-dtd

我正在使用libxml2库来解析发送给我(我的程序)的XML作为来自另一个程序的文件。谨慎,这应该意味着我从来没有得到错误的XML,但两次已经做了手动调整,破坏了收到的文件中的XML。破坏我的意思是元素有错误,结束标记不匹配开始标记,标记之间的随机字符等等。

文件很小,因此没有特别的内存担心将所有文件加载到解析器中,因此我使用xmlReadFile()来读取文档。

当XML被破坏时,我的问题出现了。 xmlReadFile()执行异常终止和核心转储。我无法通过异常捕获它,也没有将标志设置为“恢复”工作。

我看过谷歌的成功率最低。我找到了xmllint,但我真的不想每次获得新的XML文件时都要调用system()或popen()。我查看了DTD,但似乎无法弄清楚如何告诉DTD实际验证传递的值。 (文档中的许多标记的值都是一组,比如5个可能的答案之一。)当然,如果DTD工作,我至少不会崩溃xmlReadFile()。

有关如何在xmlReadFile()或xmlReadFile()之前验证XML以及如何防止崩溃的任何建议? xmllint是否有我刚刚找不到的C ++接口?

没有提升。没有改变库。

1 个答案:

答案 0 :(得分:1)

你试过xmlReaderForFile(... XML_PARSE_RECOVER ...)吗?