XML Lite解析问题 - 解析时忽略无效数据
问题描述:
我使用Microsoft的XML Lite(http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms752872%28v=vs.85%29。 aspx)XML Lite解析问题 - 解析时忽略无效数据
有没有办法忽略它可能做的任何验证错误(我在与“”有关的节点上获得了一些模糊的错误 - 尽管XML输入看起来很好)并且继续下一个节点?
我有这样
while (!reader->IsEOF())
{
result = reader->Read(&nodeType);
if (result != S_OK)
{
//just ignore cuurrent read and continue reading more from XML
continue; // does not work
}
答
阅读环路什么是XmlLite的返回error code?无效字符? XmlLite是符合W3C标准的XML解析器,这意味着它的设计是用无效字符扼杀无效的XML文件,并且没有这种功能可以忽略无效字符并继续前进。选项有:
- 使用XmlLite或其他兼容的XML解析器来生成XML。这样你就不会在第一个地方得到无效的字符。
- 如果您有源数据的控制权,则过滤掉无效字符。 XmlLite支持XML 1.0,其中一系列有效字符为#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]。
除此之外,XmlLite可能不是您的选择。
在我的情况下,问题在于我没有解析整个XML文档(而且这不是明显的:-)),正如我所预料的那样,问题就在于此。 – Ghita 2012-04-19 07:52:57
有趣的是,自Win8以来,XmlLite Reader开始支持非阻塞功能,这意味着当不是所有数据都可用时,您可以在IStream/ISequentialStream实现中返回E_PENDING,我相信这是您的情况。 Read()方法将相应地返回E_PENDING,但如果流中有更多数据可用,则下一个Read()调用将恢复解析。有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms753140(v=vs.85).aspx。 – 2012-04-20 06:01:18