C# 使用XML文件保存配方数据
在C#中,使用哈希表对XML文件读写。
知识点
XML文件
XML 指可扩展标记语言(eXtensible Markup Language)。可以理解为一种数据结构。主要用到XML的创建、节点增加、修改节点、删除节点。
定义xml文档:XmlDocument xmlDoc = new XmlDocument();
初始化xml文档:xmlDoc.Load(“D:\book.xml”);//找到xml文件
创建根元素:XmlElement xmlElement = xmlDoc.CreateElement(“”, “Employees”, “”);
创建节点:XmlElement xeSub1 = xmlDoc.CreateElement(“title”);
查找Employees节点:XmlNode root = xmlDoc.SelectSingleNode(“Employees”);
添加节点:xe1.AppendChild(xeSub1);
更改节点的属性:xe.SetAttribute(“Name”, “李明明”);
移除xe的ID属性:xe.RemoveAttribute(“ID”);
删除节点title:xe.RemoveChild(xe2);
实现步骤
创建XML文件
//获取数据
string FruitName, TempertureMode, MilkWeight, TeaWeight;
string RecipeName;if (comboBox1.SelectedItem == null)
{comboBox1.SelectedIndex = 0;}FruitName = comboBox1.SelectedItem.ToString();if (comboBox2.SelectedItem == null)
{comboBox2.SelectedIndex = 0;}
TempertureMode = comboBox2.SelectedItem.ToString();
MilkWeight = textBox2.Text.Trim();
TeaWeight = textBox3.Text.Trim();
RecipeName = textBox5.Text.Trim();string filename = System.Environment.CurrentDirectory + RecipeName + ".xml";
if (File.Exists(filename))
{label6.Text = "文件已存在";
}
else
{//创建XML文件XmlDocument xmlDoc = new XmlDocument();XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);xmlDoc.AppendChild(dec);//添加XML根元素XmlElement xmlroot = xmlDoc.CreateElement("奶茶配方");xmlDoc.AppendChild(xmlroot);// 添加一级节点XmlElement FirstChildNode = xmlDoc.CreateElement("配方名称");FirstChildNode.InnerText = RecipeName;//添加二级节点//添加水果名称到二级节点XmlElement SecondChildNode1 = xmlDoc.CreateElement("水果名称");SecondChildNode1.InnerText = FruitName;//添加温度到二级节点XmlElement SecondChildNode2 = xmlDoc.CreateElement("温度");SecondChildNode2.InnerText = TempertureMode;//添加牛奶重量到二级节点XmlElement SecondChildNode3 = xmlDoc.CreateElement("牛奶重量");SecondChildNode3.InnerText = MilkWeight;//添加糖重量到二级节点XmlElement SecondChildNode4 = xmlDoc.CreateElement("糖重量");SecondChildNode4.InnerText = TeaWeight;//将配方元素参数绑定配方名称FirstChildNode.AppendChild(SecondChildNode1);FirstChildNode.AppendChild(SecondChildNode2);FirstChildNode.AppendChild(SecondChildNode3);FirstChildNode.AppendChild(SecondChildNode4);xmlroot.AppendChild(FirstChildNode);//定义项目路径,保存xml文件string XMLpath = System.Environment.CurrentDirectory;xmlDoc.Save(XMLpath + RecipeName + ".xml");label6.Text = "配方创建完成";

本步骤操作时注意以下几个问题:
1、使用comboBox控件时,需要对控件所选内容判断,
if (comboBox1.SelectedItem == null){comboBox1.SelectedIndex = 0;}FruitName = comboBox1.SelectedItem.ToString();
2、在保存XML文件时,计划备份在项目所在的debug文件夹,但获取的只是路径,保存的是文件名。如果输入的参数是路径,就会报权限不足的错误。具体可参考XML的Save方法源代码
public virtual void Save(string filename){if (DocumentElement == null){throw new XmlException("Xml_InvalidXmlDocument", Res.GetString("Xdom_NoRootEle"));}XmlDOMTextWriter xmlDOMTextWriter = new XmlDOMTextWriter(filename, TextEncoding);try{if (!preserveWhitespace){xmlDOMTextWriter.Formatting = Formatting.Indented;}WriteTo(xmlDOMTextWriter);xmlDOMTextWriter.Flush();}finally{xmlDOMTextWriter.Close();}}
3、增加文件是否存在判断,如果保存的配方已经存在,则无法保存
