10
votes

StreamReader et lire un fichier XML

Je reçois une réponse d'un serveur Web à l'aide de StreamReader ... maintenant, je veux analyser cette réponse (c'est un fichier de document XML) pour obtenir ses valeurs, mais chaque fois que j'essaie de le faire, je reçois une erreur: racine L'élément est manquant.

Si je lisai directement le même fichier XML, le fichier est bien formaté et je peux le lire. p>

Ceci est le flux: P>

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(responseReader);
XmlNodeList address = xmlDoc.GetElementsByTagName("original");


2 commentaires

Avec console.write (responsable); Je reçois un fichier XML de préfectement formaté, je me suis copié collé dans un fichier et j'ai essayé de le lire manuellement avec mon code aussi, cela fonctionne.


De plus, vous devriez utiliser en utilisant sur la plupart de ces objets. Vous pouvez trouver webclient plus facile que la demande Web / la réponse Web - ou, comme indiqué dans l'une des réponses, laissez le document s'inquiéter de celui-ci avec juste charger (chemin)


5 Réponses :


0
votes

Vérifiez quel est le contenu de la responsabilité: il contient probablement des en-têtes supplémentaires qui rendent le XMLParser malheureux.


0 commentaires

18
votes

Vous avez appelé ReadToend () , donc consumé toutes les données (dans une chaîne). Cela signifie que le lecteur n'a rien de plus à donner. Juste: Ne fais pas ça. Ou, faites-le et utilisez loadxml (réensestring) .


0 commentaires

2
votes

Si vous le faites avec le code exact que vous avez collé dans votre question, le problème est que vous avez d'abord lire l'ensemble du flux dans la chaîne, puis essayez de lire le flux à nouveau lorsque vous appelez. xmldoc.load (responsable)

Si vous avez déjà lu l'ensemble du flux à la chaîne, utilisez cette chaîne pour créer le document XML. xmldoc.load (Responstring)


1 commentaires

La deuxième utilisation devrait être loadxml, car la charge (chaîne) attend un chemin , pas xml



6
votes

le Charger La méthode est capable d'aller chercher des documents XML à partir de ressources distantes . Donc, vous pouvez simplifier votre code comme celui-ci:

var xmlDoc = new XmlDocument();
xmlDoc.Load("http://example.com/foo.xml");
var address = xmlDoc.GetElementsByTagName("original");


3 commentaires

OP dit qu'il obtiendra "l'élément racine manquant" signifie qu'il n'y a pas d'élément racine en réponse, il ne faut donc pas tomber dans l'élément racine ou doit corriger sa réponse, votre code actuel ne modifie pas la manière actuelle.


@Saeed, non, si vous ne consommez pas correctement le streamerrisseur, il retournera une chaîne vide et le xmldocument se plaindre. Le PO d'abord appelé Readtoend sur le lecteur de flux puis a passé ce même lecteur à la méthode , mais parce que le lecteur a déjà été positionné à la fin, cela n'a rien renvoyé. Mon code la corrige car tout ce que mon code fait est de compter sur ce qui est déjà intégré dans le cadre. Bien sûr, comme je l'ai mentionné si la télécommande XML est cassée, il doit être corrigé d'abord.


Oui, je pense d'abord que OP les essaie dans différents codes :) Et maintenant, après avoir accepté la réponse, je vois son erreur.



-1
votes

L'erreur que vous obtenez signifie que XML que vous recevez manque de premier élément qui enveloppe tout le contenu. Essayez d'envelopper la réponse que vous recevez avec un élément, par exemple: xxx

espère que cela a aidé


0 commentaires