写入xml文件
第一种方法:使用XmlDocument类:
Demo1
//通过代码创建XML文档
//1、引用命名空间 System.Xml //2、创建一个 xml 文档 XmlDocument xml = new XmlDocument(); //3、创建一行声明信息,并添加到 xml 文档顶部 XmlDeclaration decl = xml.CreateXmlDeclaration("1.0", "utf-8", null); xml.AppendChild(decl); //4、创建根节点 XmlElement rootEle = xml.CreateElement("人"); xml.AppendChild(rootEle); //5、创建子结点|属性:性别 XmlElement childEle = xml.CreateElement("性别"); rootEle.AppendChild(childEle); XmlElement c2Ele = xml.CreateElement("男"); c2Ele.InnerText = "1"; childEle.AppendChild(c2Ele); c2Ele = xml.CreateElement("女"); c2Ele.InnerText = "0"; childEle.AppendChild(c2Ele); //6、创建子节点|属性:四肢 childEle = xml.CreateElement("胳膊"); rootEle.AppendChild(childEle); c2Ele = xml.CreateElement("右胳膊"); c2Ele.InnerText = "一般"; childEle.AppendChild(c2Ele); c2Ele = xml.CreateElement("左胳膊"); c2Ele.InnerText = "一般"; childEle.AppendChild(c2Ele); c2Ele = xml.CreateElement("左退"); c2Ele.InnerText = "粗壮"; childEle.AppendChild(c2Ele); c2Ele = xml.CreateElement("右腿"); c2Ele.InnerText = "粗壮"; childEle.AppendChild(c2Ele); xml.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");
-----------------------------------------------------------------------------------------------
Demo2
try
{
//初始化一个xml实例 XmlDocument myXmlDoc = new XmlDocument(); //创建xml的根节点 XmlElement rootElement = myXmlDoc.CreateElement("Computers"); //将根节点加入到xml文件中(AppendChild) myXmlDoc.AppendChild(rootElement); //初始化第一层的第一个子节点 XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer"); //填充第一层的第一个子节点的属性值(SetAttribute) firstLevelElement1.SetAttribute("ID", "11111111"); firstLevelElement1.SetAttribute("Description", "Made in China"); //将第一层的第一个子节点加入到根节点下 rootElement.AppendChild(firstLevelElement1); //初始化第二层的第一个子节点 XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name"); //填充第二层的第一个子节点的值(InnerText) secondLevelElement11.InnerText = "Lenovo"; firstLevelElement1.AppendChild(secondLevelElement11); XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price"); secondLevelElement12.InnerText = "5000"; firstLevelElement1.AppendChild(secondLevelElement12); XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer"); firstLevelElement2.SetAttribute("ID", "2222222"); firstLevelElement2.SetAttribute("Description", "Made in USA"); rootElement.AppendChild(firstLevelElement2); XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name"); secondLevelElement21.InnerText = "IBM"; firstLevelElement2.AppendChild(secondLevelElement21); XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price"); secondLevelElement22.InnerText = "10000"; firstLevelElement2.AppendChild(secondLevelElement22); //将xml文件保存到指定的路径下 myXmlDoc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml"); } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
第二种方法:使用XmlTextWriter类:
//XmlTextWriter写文件的时候, 默认是覆盖以前的文件, 如果此文件名不存在,它将创建此文件.首先设置一下,你要创建的XML文件格式,
//然后可以通过WriteStartElement和WriteElementString方法来创建元素,这两者的区别就是如果有子结点的元素,那么创建的时候就用WriteStartElement,然后去创建子元素,创建完毕后,要调用相应的WriteEndElement来告诉编译器,创建完毕,用WriteElementString来创建单个的元素,用WriteAttributeString来创建属性.如下: XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"C:\Users\Administrator\Desktop\Test\test.xml", null); //使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。 myXmlTextWriter.Formatting = Formatting.Indented; myXmlTextWriter.WriteStartDocument(false); myXmlTextWriter.WriteStartElement("日期"); myXmlTextWriter.WriteComment("这是厨房的下单记录"); myXmlTextWriter.WriteStartElement("申购单"); myXmlTextWriter.WriteAttributeString("部门", "中厨房"); myXmlTextWriter.WriteAttributeString("申购人", "赵亮"); for (int i = 0; i < 10; i++) { myXmlTextWriter.WriteElementString("编号", "0001"); myXmlTextWriter.WriteElementString("编码", "gcxg"); myXmlTextWriter.WriteElementString("名称", "国产西瓜"); myXmlTextWriter.WriteElementString("规格", "4只/每箱"); myXmlTextWriter.WriteElementString("单价", "88.5"); myXmlTextWriter.WriteElementString("单位", "箱"); myXmlTextWriter.WriteElementString("数量", "5"); myXmlTextWriter.WriteElementString("金额", "450"); myXmlTextWriter.WriteElementString("备注", "要熟的"); } myXmlTextWriter.Flush(); myXmlTextWriter.Close();
第三种方法:使用LINQ to XML 的XDocument类:
var doc = new XDocument(new XElement("Contacts", new XElement("Contact", new XAttribute("id", "01"), new XElement("Index", "0001"), new XElement("Code", "gcxg"), new XElement("Name", "国产西瓜"), new XElement("spec", "4只/每箱"), new XElement("Price", "80"), new XElement("Unit", "箱"), new XElement("Number", "4"), new XElement("Total", "320"), new XElement("Remakes", "要熟的") ))); doc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml");
=====================================================================================================
读写完整示例
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; namespace _45_Xml读写 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 创建节点 /// </summary> /// <param name="xmldoc"></param> xml文档 /// <param name="parentnode"></param>父节点 /// <param name="name"></param> 节点名 /// <param name="value"></param> 节点值 /// public static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value) { XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null); node.InnerText = value; parentNode.AppendChild(node); } private void WriteXml_Click(object sender, EventArgs e) { //创建一个 xml 文档 XmlDocument xmlDoc = new XmlDocument(); //创建类型声明节点 XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", ""); xmlDoc.AppendChild(node); //创建根节点 XmlElement noteRoot = xmlDoc.CreateElement("R"); //给节点属性赋值 noteRoot.SetAttribute("version", "1.0"); noteRoot.SetAttribute("Title", "Demo"); xmlDoc.AppendChild(noteRoot); for (int i = 0; i < 4; i++) { XmlElement RootClass1 = xmlDoc.CreateElement("A"); XmlNode NoteClass1 = xmlDoc.SelectSingleNode("R"); if (NoteClass1 != null) NoteClass1.AppendChild(RootClass1); CreateNode(xmlDoc, RootClass1, "A-value", "avalue");//可以复制多条 XmlElement RootClass2 = xmlDoc.CreateElement("B"); XmlNode NoteClass2= xmlDoc.SelectSingleNode("R").SelectNodes("A").Item(i); if (NoteClass2 != null) NoteClass2.AppendChild(RootClass2); CreateNode(xmlDoc, RootClass2, "B-value", "bvalue");//可以复制多条 XmlElement RootClass3 = xmlDoc.CreateElement("C");//添加子节点 XmlNode NoteClass3 = xmlDoc.SelectSingleNode("R").SelectNodes("A").Item(i).SelectSingleNode("B"); if (NoteClass3 != null)NoteClass3.AppendChild(RootClass3); CreateNode(xmlDoc, RootClass3, "C-value", "cvalue");//可以复制多条 } xmlDoc.Save(@"C:\Users\Administrator\Desktop\Test\test.xml"); } private void ReadXml_Click(object sender, EventArgs e) { XmlDocument xmlDoc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; //忽略文档里面的注释 XmlReader reader = XmlReader.Create(@"C:\Users\Administrator\Desktop\Test\test.xml", settings); xmlDoc.Load(reader); //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码 // 得到根节点bookstore XmlNode mainNote = xmlDoc.SelectSingleNode("R"); //通过 日期 根节点来读取XML文件 if (mainNote != null) //如果根节点存在 { XmlNodeList childNote = mainNote.ChildNodes; //声明一个获取所有子节点的集合 foreach (XmlNode outchildNote in childNote) //在这个集合中遍历所有子节点 { XmlElement bookNote = (XmlElement) outchildNote; // 将节点转换为元素,便于得到节点的属性值 XmlNodeList singleNote = bookNote.ChildNodes; // 将所有节点属性(也就是最终的值)放进节点集合 foreach (XmlNode outNote in singleNote) //遍历节点属性 { listBox1.Items.Add(outNote.InnerText); } // listBox1.Items.Add(bookNote.GetAttribute("部门").ToString()); // 得到Type和ISBN两个属性的属性值 // listBox1.Items.Add(bookNote.GetAttribute("申购人").ToString()); } } } } }