2013-03-19 125 views
8

我正在使用SqlCommand.ExecuteXmlReader检索到的XmlReaderSystem.Xml.XmlException:解析时文件意外结束发生名称

Here is my input

当我运行这行代码:

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

它工作在第一时间,第一产品节点读取预期。

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

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的某处遇到2KB的限制吗?
  2. 我ktXmlReader.Read()在while循环以某种方式跳过所有其他节点,而直接进入到EOF
+0

http://forums.asp.net/t/1191911.aspx – Codeman 2013-03-19 19:18:02

回答

4

我找到了答案here

我的问题是,当我得到XmlReader时,我正在用using语句关闭SqlConnection。

我添加了连接到我的“使用权力塔”,并将它作为参数传递,保持打开状态,并且一切正常。

0

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

+0

有趣的是,你有一个如何从读者调用XNode.Create的代码示例,还是需要重构我现有的代码?它看起来像这样做,我必须从XDocument创建一个XmlReader,而不是XmlReader的XDocument – Codeman 2013-03-19 02:10:17

+0

此外,我不试图在多个方向阅读。我打电话给ReadSubTree阅读我的输入中的单个子树(产品节点) – Codeman 2013-03-19 02:13:55

+0

@ Pheonixblade9:我只知道如何从阅读器加载文档,而不是节点。但有什么区别?除了你会得到多个文件,而不是节点。 – abatishchev 2013-03-19 02:45:03