J'ai le code suivant qui crie «élément racine manquant» pendant doc.harload () code>. MemoryStream stream = new MemoryStream();
XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);
xmlWriter.Formatting = System.Xml.Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Root");
XmlDocument doc = new XmlDocument();
stream.Position = 0;
doc.Load(stream);
xmlWriter.Close();
3 Réponses :
Vous n'avez pas rougé le il n'aura pas écrit la balise de fermeture. Vous essayez de le charger comme un document complet em>. P> Je ne suis pas sûr de quel point un xmlwriter réellement em> écrit la partie de départ de En tout cas, n'oubliez pas que cela peut avoir des attributs à écrire aussi. Le plus il pourrait écrire avec le code que vous avez est Voici un programme complet qui fonctionne: p> xmlwriter code>, il est donc possible de ne rien avoir encore écrit. De plus, vous ne remplissez jamais l'élément racine, alors même s'il a em> écrit using System;
using System.IO;
using System.Text;
using System.Xml;
class Test
{
static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
{
XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);
xmlWriter.Formatting = System.Xml.Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Root");
xmlWriter.WriteEndElement();
xmlWriter.Flush();
XmlDocument doc = new XmlDocument();
stream.Position = 0;
doc.Load(stream);
doc.Save(Console.Out);
}
}
}
POINT DE L'ORDRE: Est-ce que .Close () n'est généralement pas plus correct que .FUSH ()?
@annalata: Je suppose que cela fermerait le flux, que nous ne voulons pas faire ici. Habituellement, je voudrais juste disposer l'écrivain cependant.
Qu'est-ce que @Skeet a dit, plus, vous ne semblez pas fermer votre élément:
xmlWriter.WriteEndElement();
J'ai couvert que dans ma deuxième phrase :)
En effet, vous l'avez fait, mais dans mode furtif i> - c'est la seule raison pour laquelle je pourrais comprendre pourquoi je l'aurais manqué. :)
Eh bien, je vois que vous commencez le document, mais je ne vous vois pas Mettre fin à It ou Fermeture It ... (du moins pas avant de l'utiliser) p>
(Quelque chose de sans rapport: Bien que ce ne soit pas strictement nécessaire, vous pouvez envelopper le code dans
en utilisant des blocs code> pour votreMemoryStream code> etxmltextwriter code> objets - ils sont les deuxidisposables code>.)