xml.LoadData – Les données au niveau racine ne sont pas valides. Ligne 1, position 1

J’essaie d’parsingr du XML à l’intérieur d’un programme d’installation WiX. Le XML serait un object de toutes mes erreurs renvoyées par un serveur Web. Je reçois l’erreur dans le titre de la question avec ce code:

XmlDocument xml = new XmlDocument(); try { xml.LoadXml(mySsortingng); } catch (Exception ex) { System.IO.File.WriteAllText(@"C:\text.txt", mySsortingng + "\r\n\r\n" + ex.Message); throw ex; } 

mySsortingng est ceci (vu dans la sortie de text.txt )

   

text.txt présente comme suit:

   Data at the root level is invalid. Line 1, position 1. 

J’ai besoin de ce XML pour parsingr afin que je puisse voir si j’ai des erreurs.

modifier

Cette question n’est pas un duplicata tel que marqué. Dans cette question, la personne qui posait la question utilisait LoadXml pour parsingr un fichier XML. Je suis en train d’parsingr une chaîne, qui est l’utilisation correcte de LoadXml

Le personnage caché est probablement BOM. L’explication du problème et de la solution peut être trouvée ici , crédite James Schubert, basé sur une réponse de James Brankin trouvée ici .

Bien que la réponse précédente supprime le caractère caché, elle supprime également la première ligne entière. La version la plus précise serait:

 ssortingng _byteOrderMarkUtf8 = Encoding.UTF8.GetSsortingng(Encoding.UTF8.GetPreamble()); if (xml.StartsWith(_byteOrderMarkUtf8)) { xml = xml.Remove(0, _byteOrderMarkUtf8.Length); } 

J’ai rencontré ce problème lors de l’extraction d’un fichier XSLT du blob Azure et du chargement dans un object XslComstackdTransform. Sur ma machine, le fichier avait l’air très bien, mais après l’avoir téléchargé en tant que blob et récupéré, le caractère de la nomenclature a été ajouté.

Utilisez plutôt la méthode Load() pour résoudre le problème. Voir plus

Le problème ici était que mySsortingng avait cette ligne d’en-tête. Soit il y avait un caractère caché au début de la première ligne, soit la ligne elle-même provoquait l’erreur. J’ai coupé la première ligne comme ça:

 xml.LoadXml(mySsortingng.Subssortingng(mySsortingng.IndexOf(Environment.NewLine))); 

Cela a résolu mon problème.

Je pense que le problème concerne le codage. C’est pourquoi la suppression de la première ligne (avec l’octet de codage) pourrait résoudre le problème.

Ma solution pour Data au niveau racine est invalide. La ligne 1, position 1. dans XDocument.Parse(xmlSsortingng) remplaçait par XDocument.Load( new MemoryStream( xmlContentInBytes ) );

J’ai remarqué que ma chaîne xml semblait correcte:

  

mais dans un éditeur de texte différent, cela ressemblait à ceci:

 ? 

À la fin, je n’avais pas besoin de la chaîne xml mais de xml byte []. Si vous avez besoin d’utiliser la chaîne, vous devez rechercher des octets “invisibles” dans votre chaîne et jouer avec des encodages pour ajuster le contenu XML pour l’parsing ou le chargement.

J’espère que ça aidera

J’ai résolu ce problème en modifiant directement le tableau d’octets. Collectez le préambule UTF8 et supprimez directement l’en-tête. Ensuite, vous pouvez transformer l’octet [] en une chaîne avec la méthode GetSsortingng, voir ci-dessous. Le \ r et \ t que j’ai enlevé aussi, juste par précaution.

 XmlDocument configurationXML = new XmlDocument(); List byteArray = new List(webRequest.downloadHandler.data); foreach(byte singleByte in Encoding.UTF8.GetPreamble()) { byteArray.RemoveAt(byteArray.IndexOf(singleByte)); } ssortingng xml = System.Text.Encoding.UTF8.GetSsortingng(byteArray.ToArray()); xml = xml.Replace("\\r", ""); xml = xml.Replace("\\t", ""); 

Enregistrez votre fichier avec un encodage différent:

Fichier> Enregistrer le fichier sous …> Enregistrer sous UTF-8 sans signature.

Dans VS 2017, vous trouvez l’encodage sous forme de liste déroulante en regard du bouton Enregistrer.

Si votre fichier XML est dans une chaîne, utilisez la commande suivante pour supprimer toute marque d’ordre d’octet:

  xml = new Regex("\\<\\?xml.*\\?>").Replace(xml, ""); 

J’ai découvert l’une des solutions. Pour votre code, cela pourrait être comme suit –

 XmlDocument xml = new XmlDocument(); try { // assuming the location of the file is in the current directory // assuming the file name be loadData.xml ssortingng mySsortingng = "./loadData.xml"; xml.Load(mySsortingng); } catch (Exception ex) { System.IO.File.WriteAllText(@"C:\text.txt", mySsortingng + "\r\n\r\n" + ex.Message); throw ex; }