xmlReadFile()(C++Ubuntu)核心转储损坏的XML

xmlReadFile() (C++ Ubuntu) core dumps on broken XML

本文关键字:XML 损坏 核心 C++Ubuntu xmlReadFile 转储      更新时间:2023-10-16

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

这个文件很小,所以不用担心将所有文件加载到解析器中,所以我使用xmlReadFile()读取文档。

当XML损坏时,我的问题就来了。xmlReadFile()执行异常终止和核心转储。我无法捕捉到异常,也无法将标志设置为"恢复"。

我对谷歌的评价是最低限度的。我找到了xmllint,但我真的不想每次得到新的XML文件时都调用system()或popen()。我看了DTD,但似乎不知道如何告诉DTD实际验证传入的值。(文档中的许多标签的值都是一组可能的答案中的一个。)当然,如果DTD有效,我至少不会破坏xmlReadFile()。

关于如何在xmlReadFile()之前或使用xmlReadFile)验证XML以及如何防止崩溃,有什么建议吗?xmllint有一个我还没有找到的C++接口吗?

没有助推。没有更改库。

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