Système.Xml.XmlException: fin de fichier Inattendue lors de l'analyse de Nom a eu lieu
Je suis en utilisant un XmlReader
récupérées à l'aide de SqlCommand.ExecuteXmlReader
.
Quand je lance cette ligne de code:
XDocument currentXDoc = XDocument.Load(ktXmlReader.ReadSubtree());
il fonctionne de la première fois, la lecture dans le premier Produit nœud comme prévu.
La deuxième fois qu'il fonctionne, je reçois l'exception suivante:
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)
Je n'ai trouver cette question et cette question qui sont semblables à la mienne, mais je suis assez sûr de mon XML est bien formé (je peux l'obtenir directement à partir de l'exécution d'une procédure stockée)
Mes idées à ce jour:
- 2048 est un très suspect numéro dans les ordinateurs. Je suis en cours d'exécution dans un 2KB limite quelque part dans
XDocument
ouXmlReader
? - Mon ktXmlReader.Read() dans la boucle while est en quelque sorte sauter tous les autres nœuds et aller directement à la EOF
OriginalL'auteur Codeman | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse ici.
Mon problème était que j'étais à la clôture de l'occurrence de SqlConnection avec l'aide d'instruction quand j'ai été le XmlReader.
J'ai ajouté le lien vers mon "à l'aide de tower of power" et est passée en tant que paramètre, le garder ouvert, et tout a fonctionné parfaitement.
OriginalL'auteur Codeman
XmlReader exécution d'une opération. Vous pouvez essayer de réinitialiser la position, ou ce qui est plus facile - créer un nouveau lecteur d'un document existant.
Aussi, je ne suis pas d'essayer de lire dans de multiples directions. Je vais appeler ReadSubTree à lire individuels sous-arborescences (Produit nœuds) dans mon entrée
Je sais seulement comment charger un document à partir de lecteur, pas un nœud. Mais quelle est la différence? Sauf que vous obtiendrez de multiples documents au lieu de les nœuds.
De mon XmlReader expérience de débogage, après lecture du premier nœud, il peut être dans l'état incorrect. Vérifiez que l'appel lecteur.Read() une ou plusieurs fois. Également dans le debug, vous pouvez faire un truc:
string t = XDocument.Load(parser).ToString()
pour voir quel est l'état actuel et de ce qui en résulterait que vous obtenez.OriginalL'auteur abatishchev