Система.XML.XmlException: непредвиденный конец файла при анализе имени

Я использую XmlReader получены с помощью SqlCommand.ExecuteXmlReader.

вот мой вклад

когда я запускаю эту строку кода:

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)

Я нашел этот вопрос и этот вопрос это было похоже на мое, но я уверен, что мой XML хорошо сформированный (я могу получить его непосредственно от запуска sproc)

мои идеи до сих пор:

  1. 2048-очень подозрительное число в компьютерах. Я сталкиваюсь с ограничением 2KB где-то в XDocument или XmlReader?
  2. мой ktXmlReader.Read () в цикле while каким-то образом пропускает все другие узлы и идет прямо к EOF

2 ответов


Я нашел ответ!--1-->здесь.

моя проблема заключалась в том, что я закрывал sqlconnection с помощью оператора using, когда я получал XmlReader.

Я добавил соединение к моему "используя башню силы" и передал его как параметр, держа его открытым, и все работало отлично.


выполнение XmlReader-это операция в одну сторону. Вы можете попытаться сбросить его положение, или что проще -создайте нового читателя из существующего документа.