在调用XElement.Load()之前读取ReadSubtree()的整个字符串

时间:2015-08-18 02:04:09

标签: c# xml debugging exception xml-parsing

我正在使用以下代码从流中读取xml子树(其中reader是XmlReader):

while (reader.Read())
{
   using (XmlReader subTreeReader = reader.ReadSubtree())
   {
      try
      {
         XElement xmlData = XElement.Load(subTreeReader);
         ProcessStreamingEvent(xmlData);
      }
      catch (XmlException ex)
      {                                        
        // want to write xml subtree
      }
   }
}

大部分时间都可以正常工作,但是一旦XElement.Load(subTreeReader)抛出异常,就像

一样
  

名称不能以'['字符,十六进制值0x5B开头。线   1,位置775。

信息大多无用;我需要输出XElement.Load()尝试解析的整个字符串。我怎样才能做到这一点?在异常处理程序中,信息很少; subTreeReader.Nodetype是Text,Value是“spread”。也许我需要在调用XElement.Load()之前读取subTreeReader的内容?似乎subTreeReader应该包含整个字符串,因为它知道树的结束位置......?

我尝试用以下代码替换XElement xmlData = XElement.Load(subTreeReader):

string xmlString = subTreeReader.ReadOuterXml();
XElement xmlData = XElement.Load(xmlString);

但xmlString为空(即使subTreeReader确实包含有效的xml)。

有趣(并且一件好事)不是XmlReader.Read()或XmlReader.ReadSubTree()抛出异常(当流可能不包含xml时),而是XElement.Load()。让我想知道ReadSubTree()在流不包含xml时如何知道何时停止读取。

0 个答案:

没有答案