0

I've written a setting file in C# as XML

XmlWriter xmlWriter = XmlWriter.Create(files);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Settings");

xmlWriter.WriteStartElement("launch");
xmlWriter.WriteString("launch tab");
xmlWriter.WriteEndElement();

xmlWriter.WriteStartElement("some_setting");
xmlWriter.WriteString("empty");
xmlWriter.WriteEndElement();

And so on, but how to read it back?
I keep getting errors.

XmlReader xmlReader = XmlReader.Create(files);

xmlReader.ReadStartElement("launch");
textBox1.Text = xmlReader.ReadString();

I wish to simply read it back in but getting the error

System.Xml.XmlException: 'Element 'launch' was not found

Line 1, position 40.

Ricky Dam
  • 1,833
  • 4
  • 23
  • 42
Data
  • 113
  • 2
  • 11

2 Answers2

0

Read and write using XmlWriter must be symmetrical - you are missing reading Settings in your read code.

Note: it may be easier to use serialization to read/write whole objects - Serialize an object to XML

Alexei Levenkov
  • 98,904
  • 14
  • 127
  • 179
0

Of the many ways to parse an XML file (see here for a decent breakdown of the ways), in general I find parsing with an XmlDocument to be more straightforward. For your code it would be something similar to the example below:

void CreateXML(string fileName)
{
    XmlWriter xmlWriter = XmlWriter.Create(fileName);
    xmlWriter.WriteStartDocument();
    xmlWriter.WriteStartElement("Settings");

    xmlWriter.WriteStartElement("launch");
    xmlWriter.WriteString("launch tab");
    xmlWriter.WriteEndElement();

    xmlWriter.WriteStartElement("some_setting");
    xmlWriter.WriteString("empty");
    xmlWriter.WriteEndElement();

    xmlWriter.WriteEndElement();
    xmlWriter.WriteEndDocument();
    xmlWriter.Close();
}

void ReadXML(string fileName)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(fileName);
    XmlNode root = doc.SelectSingleNode("Settings");
    string launchSetting = root.SelectSingleNode("launch").InnerText;
    textBox1.Text = launchSetting;
}

If you want to stick with the XmlReader, I haven't used it before but as Alexei says in his answer it appears that you're not reading in the Settings node start (see below).

XmlReader xmlReader = XmlReader.Create(files);

xmlReader.ReadStartElement("Settings");

xmlReader.ReadStartElement("launch");
textBox1.Text = xmlReader.ReadString();
Bales
  • 58
  • 1
  • 5