我有一个XML解析器崩溃不完整的XML数据.因此,提供给它的XML数据可能是以下之一:
twocontent ( the parser treats it as two root elements )
元素属性也被处理(虽然上面没有显示).
现在,问题是当我从套接字I中读取数据时,我会在片段中获取数据.例如:
one content
因此,在将XML发送到解析器之前,我必须构造一个有效的XML并发送它.什么编程构造(如迭代,递归等)最适合这种情况.
我用C++编程.
请帮忙.
简短的回答:你做错了.
您的问题混淆了两个不同的问题:
那是不是格式良好的XML数据的解析所有,即所谓的标记汤.
示例:由不了解XML或具有糟糕编码实践的程序员生成的文件.
这样说并不公平:一个格式不正确的XML文件根本就不是XML文档.每个正确的XML解析器都会拒绝它.理想情况下,您将努力纠正此数据的来源,并确保生成正确的XML.
或者,使用标签汤解析器,即执行错误纠正的解析器.
有用的标签汤解析器通常实际上是HTML解析器. 另一个答案已经指出了整洁.
确保您了解解析器实际执行的更正步骤,因为没有可以修复XML的通用方法.特别是,整洁在"修复"数据方面非常积极,比真正的浏览器和HTML 5规范更具侵略性.
从套接字解析XML,其中数据在流中逐块地到达.在这种情况下,XML文档可能被视为"无限",在看到根元素的最终结束标记之前很久就会将其作为显示处理.
示例:XMPP是一个像这样工作的协议.
解决方案是使用基于拉的解析器,例如libxml2中的XMLTextReader API.
如果需要XML子元素的基于树的数据结构作为解析器,则可以为正在读取的每个此类元素构建树结构,而不是为整个文档构建树结构.