Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ XML Lite解析问题-解析时忽略无效数据_C++_Visual Studio_Xml Parsing_Xmllite - Fatal编程技术网

C++ XML Lite解析问题-解析时忽略无效数据

C++ XML Lite解析问题-解析时忽略无效数据,c++,visual-studio,xml-parsing,xmllite,C++,Visual Studio,Xml Parsing,Xmllite,我使用微软的XMLLite(http://msdn.microsoft.com/en-us/library/windows/desktop/ms752872%28v=vs.85%29.aspx) 有没有一种方法可以忽略它可能产生的任何验证错误(我在与“”相关的节点上遇到了一些模糊的错误-尽管XML输入看起来很好)并继续下一个节点 我有这样的阅读循环 while ( !reader->IsEOF()) { result = reader->Read(&nodeT

我使用微软的XMLLite(http://msdn.microsoft.com/en-us/library/windows/desktop/ms752872%28v=vs.85%29.aspx)

有没有一种方法可以忽略它可能产生的任何验证错误(我在与“”相关的节点上遇到了一些模糊的错误-尽管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返回的结果是什么?无效字符?XmlLite是一个W3C兼容的XML解析器,这意味着它在设计上会阻塞带有无效字符的无效XML文件,并且没有忽略无效字符并继续前进的功能。这些选择包括:

  • 使用XmlLite或其他兼容的XML解析器生成XML。这样一来,一开始就不会得到无效字符
  • 如果您可以控制源数据,请过滤掉无效字符。XmlLite支持XML1.0,其有效字符范围为#x9 |#xA |#xD |[#x20-#xD7FF]|[#xE000-#xffd]|[#x10000-#x10FFFF]

  • 除此之外,XmlLite可能不是您的选择。

    在我的例子中,问题是我没有像我预期的那样解析整个XML文档(这并不明显:-),问题就在于此。有趣的是,XmlLite Reader从Win8开始支持非阻塞功能,这意味着当并非所有数据都可用时,您可以在IStream/ISequentialStream实现中返回E_PENDING,我相信这就是您的情况。Read()方法将相应地返回E_PENDING,但如果流中有更多可用数据,则下一个Read()调用将恢复解析。有关更多信息,请参阅。