Lire le XML de Flux
Je travaille avec ASP.NET et je suis importation d'un fichier XML à partir d'un formulaire. Droit maintenant, je les convertir en un Stream
:
Stream inputStream = XmlFileUploadControl.PostedFile.InputStream;
parce que j'ai peut-être besoin de cette version plus tard.
Je voudrais tout d'abord vérifiez assurez-vous que le fichier XML est le format correct, et, si c'est le cas, l'affichage des informations:
if (CorrectFileFormat(inputStream))
{
DisplayLicenseInfo(inputStream);
}
else
{
StatusLabel.Text = "Selected file is not a LicensingDiag XML file";
}
La CorrectFileFormat()
méthode:
protected Boolean CorrectFileFormat(Stream inputStream)
{
XmlReader reader = XmlReader.Create(inputStream);
if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "DiagReport")
{
return true;
}
}
La DisplayLicenseInfo()
méthode:
protected void DisplayLicenseInfo(Stream inputStream)
{
XmlReader reader = XmlReader.Create(inputStream);
if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "LicensingStatus")
{
StatusLabel.Text += ("Licensing Status: " + reader.ReadString() + "<br><br>");
}
}
Cependant, je rencontre un XmlException
qui dit que "les Données au niveau de la racine n'est pas valide. Ligne 1, position 1". Est-ce parce que j'ai déjà lu à travers le flux d'entrée une fois, et vous devez le réinitialiser? Si oui, comment dois-je faire?
Quelle est la valeur de la chaîne? C'est probablement ce fichus
FEFF
...OriginalL'auteur Adam_G | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
La première fois que vous créez un
XmlReader
dans le flux, il est à la position 0. Mais la deuxième fois que vous créez unXmlReader
, le cours d'eau a déjà été lu partiellement, de sorte qu'il n'est plus en position 0, de sorte que leXmlReader
ne peut pas lire le document XML.Au lieu de cela, vous devez créer le
XmlReader
qu'une seule fois:Si le fichier est petit, vous pourriez aussi envisager de charger l'intégralité du document XML à l'aide de
XmlDocument
ouXDocument
(Linq to XML)XmlReader
objet, comme le ferait dans la première méthode, ou serait la 2ème méthode toujours commencer par le commencement?Tout cela va certainement dans le rightt direction, et me met à la méthode Display (), il fait ensuite quelque chose à la déclaration que je exécuter dans cette méthode, où il ne fonctionne plus. Des idées?
la deuxième méthode utilise le même lecteur de continuer à partir de la position actuelle. Concernant votre deuxième question, vous avez besoin pour être plus précis... que voulez-vous dire par "il fait quelque chose à l'instruction" ? Et exactement comment ça "plus de travail" ?
Quand je dis "ça ne marche pas", je veux dire que le
if...
énoncé dans la méthode 2, utilisé pour évaluer àTrue
, mais évalue maintenant àFalse
. Donc, si leStream
ou laXmlReader
est partiellement à lire dans le document, il n'a pas vraiment nous mener n'importe où. Ai-je raté quelque chose?Eh bien, je suppose que cela dépend de ce que vous essayez de faire... de toute façon, le chargement du XML complet comme un XDocument serait rendre votre vie beaucoup plus facile...
OriginalL'auteur Thomas Levesque
@thomas-levesque https://stackoverflow.com/users/98713/thomas-levesque a droit, si le contenu lui-même est bien formé, vous avez besoin de rembobiner le flux de retour pour le début du contenu.
La CorrectFileFormat() méthode:
La DisplayLicenseInfo() méthode:
OriginalL'auteur Lin Song Yang