我正在使用libxml2库来解析作为另一个程序中的文件发送给我(我的程序)的XML。小心应该意味着我永远不会得到不良的XML,但是我已经做了两次手工调整,破坏了接收文件中的XML。破损是指元素有错误,结束标签与开始标签不匹配,标签之间的随机字符等。

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

当XML损坏时,我的问题来了。 xmlReadFile()进行异常结束和核心转储。我无法捕获它,也无法将标志设置为“恢复”。

我看过Google的成功率最低。我找到了xmllint,但是我真的希望不必在每次获取新的XML文件时都调用system()或popen()。我查看了DTD,但似乎无法弄清楚如何告诉DTD实际验证在中传递的值。 (文档中的许多标签的值都是一组(例如5个可能的答案)之一。)当然,如果DTD有效,我至少不会使xmlReadFile()崩溃。

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

无助。无需更改库。

最佳答案

您尝试过xmlReaderForFile(... XML_PARSE_RECOVER ...)吗?

关于c++ - xmlReadFile()(C++ Ubuntu)核心转储在损坏的XML上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12476626/

10-12 04:05