如何写入根元素?

时间:2015-04-26 03:54:39

标签: c# xml

当我使用以下代码时,我可以成功写入XML文件,但它会在根元素之外写入。

StreamWriter sw = File.AppendText(Environment.CurrentDirectory + "\\Settings.xml");
XmlTextWriter xtw = new XmlTextWriter(sw);

xtw.WriteStartElement("connection");
xtw.WriteElementString("id", name);
xtw.WriteElementString("Version", "2.3.1");
xtw.WriteElementString("Server", ip_textBox.Text);
xtw.WriteElementString("Port", port_textBox.Text);
xtw.WriteElementString("Uid", user_textBox.Text);
xtw.WriteElementString("Password", pass_textBox.Text);

xtw.Close();

代码运行后,XML看起来像这样:

<?xml version='1.0' encoding='utf-8' ?>
<root>

</root>
<connection><id>test</id><Version>2.3.1</Version><Server>127.0.0.1</Server><Port>3306</Port><Uid>root</Uid><Password>root</Password>

什么时候看起来像:

<?xml version='1.0' encoding='utf-8' ?>
<root>
  <connection>
     <id>Test</id>
     <Version>2.3.1</Version>
     <Server>127.0.0.1</Server>
     <Port>3306</Port>
     <Uid>root</Uid>
     <Password>root</Password>
  </connection>
</root>

我的问题又是如何在根元素内写入?

2 个答案:

答案 0 :(得分:1)

您可以使用XmlDocument

var path = Environment.CurrentDirectory + "\\test.xml";
XmlDocument x = new XmlDocument(); 
x.Load(path);

var connection = x.CreateElement("connection");
connection.AppendChildWithText(x, "id", "Test");
connection.AppendChildWithText(x, "dtime", DateTime.Now.ToString());
// and so on, 
x.DocumentElement.AppendChild(connection);

x.Save(path);

AppendChildWithText()是和扩展方法:

public static XmlElement AppendChildWithText(this XmlElement me, XmlDocument x, string name, string value) {
  var el = x.CreateElement(name);
  el.InnerText = value;
  me.AppendChild(el);
  return el; 
}

其他说明:

  • 如果您需要, 可以获取XmlReader的验证功能,方法是初始化XmlDocument,其实例为XmlReader

  • 您的初始尝试失败,因为您要将原始文本附加到文件中。这对XML不起作用。 XmlDocument为您处理必要的功能。

答案 1 :(得分:1)

看起来你的文件已经包含了一些XML(根据示例输出可能<root></root>)。由于您使用的是AppendText,因此您的XML将附加到现有文件而不是替换。因此,您添加的所有节点都在root之外,XML无效。

没有合理的方法将插入节点插入到文本文件中(可能,但通常很难)。

如果要使用XmlWriter生成完整的XML,则需要重新创建文件并从root开始添加所有节点。

或者,您可以将现有文件作为XML加载(使用XmlDocument或更受欢迎的XDocument),将节点添加到&#34; root&#34;元素并保存整个文件。