当我使用以下代码时,我可以成功写入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>
我的问题又是如何在根元素内写入?
答案 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;
}
其他说明:
如果您需要, 可以1>获取XmlReader
的验证功能,方法是初始化XmlDocument
,其实例为XmlReader
。
您的初始尝试失败,因为您要将原始文本附加到文件中。这对XML不起作用。 XmlDocument
为您处理必要的功能。
答案 1 :(得分:1)
看起来你的文件已经包含了一些XML(根据示例输出可能<root></root>
)。由于您使用的是AppendText
,因此您的XML将附加到现有文件而不是替换。因此,您添加的所有节点都在root之外,XML无效。
没有合理的方法将插入节点插入到文本文件中(可能,但通常很难)。
如果要使用XmlWriter生成完整的XML,则需要重新创建文件并从root开始添加所有节点。
或者,您可以将现有文件作为XML加载(使用XmlDocument
或更受欢迎的XDocument
),将节点添加到&#34; root&#34;元素并保存整个文件。