我正在使用 libxml2 库将发送给我(我的程序)的 XML 解析为来自另一个程序的文件。小心应该意味着我永远不会得到错误的 XML,但我已经做了两次手动调整,破坏了接收文件中的 XML。破碎是指元素有错误,结束标签与开始标签不匹配,标签之间的随机字符等。
该文件很小,因此无需担心将所有文件加载到解析器中,因此我使用 xmlReadFile() 来读取文档。
当 XML 被破坏时,我的问题就出现了。xmlReadFile() 执行异常结束和核心转储。我无法通过异常捕获它,也无法将标志设置为“恢复”工作。
我看过谷歌的成功率最低。我找到了 xmllint,但我真的不希望每次获得新的 XML 文件时都必须调用 system() 或 popen()。我查看了 DTD,但似乎无法弄清楚如何告诉 DTD 实际验证传入的值。(文档中的许多标签的值都是一组,比如 5 个可能的答案之一。)当然,如果 DTD 有效,我至少不会使 xmlReadFile() 崩溃。
关于如何在 xmlReadFile() 或使用 xmlReadFile() 之前验证 XML 以及如何防止崩溃的任何建议?xmllint 是否有一个我还没有找到的 C++ 接口?
没有提升。无需更改库。