2012-04-06 67 views
0

我使用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 
     } 

回答

1

閱讀環路什麼是XmlLite的返回error code?無效字符? XmlLite是符合W3C標準的XML解析器,這意味着它的設計是用無效字符扼殺無效的XML文件,並且沒有這種功能可以忽略無效字符並繼續前進。選項有:

  1. 使用XmlLite或其他兼容的XML解析器來生成XML。這樣你就不會在第一個地方得到無效的字符。
  2. 如果您有源數據的控制權,則過濾掉無效字符。 XmlLite支持XML 1.0,其中一系列有效字符爲#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]。

除此之外,XmlLite可能不是您的選擇。

+0

在我的情況下,問題在於我沒有解析整個XML文檔(而且這不是明顯的:-)),正如我所預料的那樣,問題就在於此。 – Ghita 2012-04-19 07:52:57

+1

有趣的是,自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