简体   繁体   English

用C#编写和阅读XML

[英]Writing and reading XML in C#

I've written a setting file in C# as XML 我已经在C#中以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 System.Xml.XmlException:找不到元素“启动”

Line 1, position 40. 第1行,位置40。

Read and write using XmlWriter must be symmetrical - you are missing reading Settings in your read code. 使用XmlWriter进行的读取和写入必须对称-您在读取代码中缺少读取设置。

Note: it may be easier to use serialization to read/write whole objects - Serialize an object to XML 注意:使用序列化来读取/写入整个对象可能会更容易- 将对象序列化为XML

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. 在解析XML文件的多种方法中(有关方法的详细介绍,请参见此处 ),总的来说,我发现使用XmlDocument进行解析更为简单。 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,我以前从未使用过它,但是正如Alexei在他的回答中说的那样,您似乎没有在Settings节点的开始位置阅读(请参阅下文)。

XmlReader xmlReader = XmlReader.Create(files);

xmlReader.ReadStartElement("Settings");

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM