我正在使用以下代码从流中读取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时如何知道何时停止读取。