2013-03-19 77 views
8

SqlCommand.ExecuteXmlReaderを使用して取得したXmlReaderを使用しています。System.Xml.XmlException:名前の解析中に予期しないファイルの終わりが発生しました

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

それが期待通りに最初の製品のノードに読んで、初めての作品:

Here is my input

私はこのコード行を実行します

それが実行される第二の時間、私は次の例外を取得:

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が整形式であるかなり確信していますこれまでのところ)

私のアイデアをSPROCを実行しているから直接それを得る:

  1. 2048は、コンピュータでは非常に疑わしい数です。 XDocumentまたはXmlReaderに2KBの制限がありますか? whileループで
  2. 私ktXmlReader.Read()は何とか他のすべてのノードをスキップして
+0

http://forums.asp.net/t/1191911.aspx – Codeman

答えて

4

答えはhereです。

私の問題は、XmlReaderを取得しているときにusingステートメントを使用してSqlConnectionを閉じていたことでした。

私は「電源の塔」を使って接続を追加し、それをパラメータとして渡し、開いたままにして、すべてが完全に機能しました。

0

たXmlReader実行は一方向の操作でEOFに直進されます。あなたはその位置をリセットしようとするかもしれません、またはより簡単なもの - create a new reader from existing document

+0

興味深いことに、読者からXNode.Createを呼び出す方法のコードサンプルがありますか、それとも既存のコードのリファクタリングが必要でしょうか?それは、XDocumentからXmlReaderを作成する必要があります。 – Codeman

+0

また、複数の方向で読み込もうとしていません。私はReadSubTreeを呼び出して、自分の入力内の個々のサブツリー(Productノード)を読み取るようにしています。 – Codeman

+0

@ Pheonixblade9:ノードではなくリーダーからドキュメントを読み込む方法しか知りません。しかし、違いは何ですか?あなたはノードの代わりに複数の文書を得ることになります。 – abatishchev

関連する問題