System.Xml.XmlException:解析名称时出现意外的文件结尾

时间:2013-03-19 02:03:52

标签: c# xml linq linq-to-xml xmlreader

我正在使用XmlReader检索SqlCommand.ExecuteXmlReader

Here is my input

当我运行这行代码时:

XDocument currentXDoc = XDocument.Load(ktXmlReader.ReadSubtree());

它第一次工作,按预期读取第一个Product节点。

第二次运行时,我得到以下异常:

System.Xml.XmlException:
Message: Unexpected end of file while parsing Name has occurred. Line 1, position 2048.

Stacktrace:    at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32& colonPos)
   at System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
   at System.Xml.XmlTextReaderImpl.ParseEndElement()
   at System.Xml.XmlTextReaderImpl.ParseElementContent()
   at System.Xml.XmlSubtreeReader.Read()
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
   at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
   at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)

我确实找到了与我类似的this questionthis question,但我很确定我的XML格式正确(我可以直接从运行程序中获取它)

到目前为止我的想法:

  1. 2048是计算机中非常可疑的数字。我在XDocumentXmlReader
  2. 的某处遇到了2KB的限制
  3. 我在循环中的ktXmlReader.Read()以某种方式跳过所有其他节点并直接进入EOF

2 个答案:

答案 0 :(得分:5)

我找到了答案here

我的问题是我在获取XmlReader时使用using语句关闭了SqlConnection。

我添加了与“使用权力塔”的连接,并将其作为参数传递,保持打开状态,一切运行良好。

答案 1 :(得分:0)

XmlReader执行是单向操作。您可以尝试重置它的位置,或者更容易 - create a new reader from existing document