Écriture de XML en C # – Erreur ‘Token StartElement dans l’état Epilog entraînerait un document XML non valide’

J’essaie d’écrire dans un document XML en prenant des données d’un ArrayList de listes

for (int i = 0; i < 15; i++) { string headname = (headers[0] as List)[i]; headname.Replace("&", "&"); headname.Replace("", ">"); headname.Replace("\"", """); headname.Replace("'", "'"); textWriter.WriteStartElement("MetadataName", ""); textWriter.WriteSsortingng(headname); textWriter.WriteEndElement(); 

Le problème que je rencontre est qu’après avoir parcouru la boucle for une fois, j’obtiens l’erreur «Token StartElement dans l’état Epilog entraînerait une erreur de document XML» sur la ligne avec WriteStartElement. résoudre le problème et ne pas vraiment eu de percée. Merci.

Édité pour mise à jour.

Votre problème est ici:

 textWriter.WriteStartElement("Metadata Name", ""); 

Un nom d’élément ne peut pas contenir d’espaces. Essaye ça:

 textWriter.WriteStartElement("MetadataName", ""); 

Je suppose que les données de votre tableau d’en- headers sont bien formées pour XML (par exemple, toutes les commandes sont échappées sur & etc …).

De plus, comme le note Mark dans sa réponse, vous devez vous assurer que le code XML est enraciné, c’est-à-dire qu’il existe un élément racine dans lequel vous insérez vos éléments MetadataName .

Lisez à propos de XML bien formé et de ce que cela signifie – vous devez vous assurer que votre document est bien formé, à mesure que vous le construisez.

Un document XML aura un élément racine, c’est-à-dire un élément incluant tous les autres éléments. Tu n’en as pas

Votre doc est comme

   

Un document XML est comme

     

Vous devez écrire WriteStartElement et WriteEndElement autour de votre boucle