知名企业门户网站建设联系电话,广州海珠区二手房房价,微信商城在哪里找,建立公司网站()C# 读写xml文件总结C#写入xml文件1、XmlDocument2、DataSet对象里的值来生成XML文件3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。示例#xff1a;写入xml1、创建xml文档2 、增加节点3 、修改节点#xff1a;4 、删除节点c#读取xml文件C#写入xml文件
1、XmlDo…
C# 读写xml文件总结C#写入xml文件1、XmlDocument2、DataSet对象里的值来生成XML文件3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。示例写入xml1、创建xml文档2 、增加节点3 、修改节点4 、删除节点c#读取xml文件C#写入xml文件
1、XmlDocument
1。我认为是最原始最基本的一种利用XmlDocument向一个XML文件里写节点然后再利用XmlDocument保存文件。 首先加载要写入的XML文件但是如果没有的就要新建在新建的过程中要有写入的代码
XmlDocument doc new XmlDocument();try{doc.Load(new.xml);}catch{XmlTextWriter xtw new XmlTextWriter(new.xml, Encoding.UTF8);//新建XML文件 xtw.WriteStartDocument();xtw.WriteStartElement(gnode);// gnode根节点 xtw.WriteStartElement(myxm1);// gnode根节点下的元素myxmls xtw.WriteEndElement();xtw.WriteEndElement();xtw.WriteEndDocument();xtw.Close();doc.Load(new.xml);}XmlNode xn doc.DocumentElement;//找到根节点 XmlElement xe doc.CreateElement(myxml2);//在根节点下创建元素如果是属性则用XmlAttribute xe.InnerText 薪薪代码hahaha;//给子节点写入文本节点值 xn.AppendChild(xe);//根节点将其纳入 doc.Save(new2.xml);//利用XmlDocument保存文件}注意点在新建根节点的时候WriteStartElement只能嵌套也就是只能有一个根节点。 2、DataSet对象里的值来生成XML文件
应用到数据库将数据库的DataSet对象里的值来生成XML文件的元素
using (SqlConnection con new SqlConnection(Server.;DataBaseHGSTUDY;uidsa;pwdyao)){con.Open();SqlCommand command new SqlCommand(select * from GL_STUDY, con);command.CommandType CommandType.Text;DataSet ds new DataSet(DATASET);//DATASET将成为XML文件中的根节点名称否则系统将其命名为NewDataSet SqlDataAdapter sda new SqlDataAdapter();sda.SelectCommand command;sda.Fill(ds, DATATABLE);//DATATABLE为所生成XML文件中的子节点名称否则系统将其命名为Table。 ds.WriteXml(dbxml.xml);// DataSet的方法WriteXml将数据写入到XML文件就是这么一句话。如果不保存到文件直接ds.GetXML() }3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。
用一个字符串作为一个XML文档中的xmlAttribute或xmlElement。[其元素或属性由类的定义来设置(xml串行化)]
using System;System.xml.Serialization;
先初始化一个类设置属性值
var xmlDoc new XmlDocument();
//Create the xml declaration first
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration(1.0, utf-8, null));
//Create the root node and append into doc
var el xmlDoc.CreateElement(Contacts);
xmlDoc.AppendChild(el);
// Contact
XmlElement elementContact xmlDoc.CreateElement(Contact);
XmlAttribute attrID xmlDoc.CreateAttribute(id);
attrID.Value 01;
elementContact.Attributes.Append(attrID);
el.AppendChild(elementContact);
// Contact Name
XmlElement elementName xmlDoc.CreateElement(Name);
elementName.InnerText Daisy Abbey;
elementContact.AppendChild(elementName);
// Contact Gender
XmlElement elementGender xmlDoc.CreateElement(Gender);
elementGender.InnerText female;
elementContact.AppendChild(elementGender);
xmlDoc.Save(test1.xml);建XmlSerializer实例
class XXX { XmlSerializer ser new XmlSerializer(Type.GetType(forxml.truck)); Truck tr new Truck(); tr.ID 1; tr.cheID 赣A T34923;}Serialize方法–完成对类的串行化
XmlTextWriter xtw new XmlTextWriter(myxml.xml,Encoding.UTF8); 用XmlTextWriter 创建一个XML文件 ser.Serialize(xtw, tr); //如果只想显示可以直接ser.Serialize(Console.Out, tr);
}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”); 删除节点titlexe.RemoveChild(xe2); 示例写入xml
1、创建xml文档
public void CreateXMLDocument()
{XmlDocument xmlDoc new XmlDocument();
//加入XML的声明段落,?xml version1.0 encodinggb2312?XmlDeclaration xmlDeclar;xmlDeclar xmlDoc.CreateXmlDeclaration(1.0, gb2312, null);xmlDoc.AppendChild(xmlDeclar); //加入Employees根元素XmlElement xmlElement xmlDoc.CreateElement(, Employees, );xmlDoc.AppendChild(xmlElement); //添加节点XmlNode root xmlDoc.SelectSingleNode(Employees);XmlElement xe1 xmlDoc.CreateElement(Node);xe1.SetAttribute(Name, 薪薪代码);xe1.SetAttribute(ISB, 2-3631-4); //添加子节点XmlElement xeSub1 xmlDoc.CreateElement(title);xeSub1.InnerText 学习VS;xe1.AppendChild(xeSub1);XmlElement xeSub2 xmlDoc.CreateElement(price);xe1.AppendChild(xeSub2);XmlElement xeSub3 xmlDoc.CreateElement(weight);xeSub3.InnerText 20;xeSub2.AppendChild(xeSub3);root.AppendChild(xe1);xmlDoc.Save(D:\\book.xml);//保存的路径
}生成的xml文件如下
?xml version1.0 encodingGB2312?
-Employees-Node ISB2-3631-4 Name薪薪代码title学习VS/title-priceweight20/weight/price/Node
/Employees2 、增加节点
XmlDocument xmlDoc new XmlDocument();
xmlDoc.Load(D:\\book.xml);//找到xml文件
XmlNode root xmlDoc.SelectSingleNode(Employees);//查找Employees节点
XmlElement xe1 xmlDoc.CreateElement(Node2);//添加Node2节点
xe1.SetAttribute(Name, 张飞);
XmlElement xeSub1 xmlDoc.CreateElement(title);//定义子节点
xeSub1.InnerText 心情好;
xe1.AppendChild(xeSub1);//添加节点到Node2
root.AppendChild(xe1);//添加节点到Employees
xmlDoc.Save(D:\\book.xml);结果
?xml version1.0 encodingGB2312?-Employees-Node ISB2-3631-4 Name薪薪代码title学习VS/title-priceweight20/weight/price/Node-Node2 Name张三title心情好/title/Node2-Node2 Name张三title心情好/title/Node2
/Employees3 、修改节点
public void ModifyNode()
{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(D:\\book.xml);XmlNodeList nodeList xmlDocument.SelectSingleNode(Employees).ChildNodes;//获取Employees节点的所有子节点foreach (XmlNode xn in nodeList)//遍历{XmlElement xe (XmlElement)xn;if (xe.GetAttribute(Name) 薪薪代码){xe.SetAttribute(Name, 薪薪);//更改节点的属性XmlNodeList xnl xe.ChildNodes;//获取xe的所有子节点foreach (XmlNode xn1 in xnl){XmlElement xe2 (XmlElement)xn1;//将节点xn1的属性转换为XmlElementif (xe2.Name title)//找到节点名字为title的节点{xe2.InnerText 今天天气不好;}if (xe2.Name price){XmlNodeList xnl2 xe2.ChildNodes;foreach (XmlNode xn2 in xnl2){if (xn2.Name weight){xn2.InnerText 88;}}}}}}xmlDocument.Save(D:\\book2.xml);
}运行结果:
?xml version1.0 encodingGB2312?
-Employees
-Node ISB2-3631-4 Name薪薪
title今天天气不好/title-price
weight88/weight
/price
/Node
-Node2 Name张三
title心情好/title
/Node2/Employees4 、删除节点
public void DeleteNode()
{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(D:\\book1.xml);XmlNodeList xnl xmlDocument.SelectSingleNode(Employees).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name Node){XmlElement xe (XmlElement)xn;//将xn的属性转换为XmlElementxe.RemoveAttribute(ID);//移除xe的ID属性XmlNodeList xnl2 xe.ChildNodes;for (int i 0; i xnl2.Count; i){XmlElement xe2 (XmlElement)xnl2.Item(i);if (xe2.Name title){xe.RemoveChild(xe2);//删除节点title}}}}xmlDocument.Save(D:\\book3.xml);
}结果
?xml version1.0 encodingGB2312?
-Employees
-Node ISB2-3631-4 Name薪薪-price
weight20/weight
/price
/Node-
Node2 Name张三
title心情好/title
/Node2-
Node2 Name张三
title心情好/title
/Node2
/Employeesc#读取xml文件
xml文件如下
?xml version1.0 encodingutf-8 ?
configurationNServerAddress1143/ServerAddressID192.168/ID/configurationN在写入xml文件时最主要使用了两个方法Load和Save。
Load初始化xml文档以便项目文件获取具体的xml节点的值。
public void Load(string path)
{try{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name configuration_ServerAddress){ServerAddress xn.InnerText;}}}catch(Exception ex){ }
}Save在项目系统中进行修改配置文件值后需要对xml进行重新保存
public void Save(string path)
{try{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name configuration_ServerAddress){xn.InnerText ServerAddress;}}xmlDocument.Save(path);}catch (Exception ex){ }
}此处将所有代码都贴出来方便下次实现。因为项目是WPF文件而且都是简单控件所以只贴出后台代码。
class ConfigurationManager:INotifyPropertyChanged
{public const string managerNode configurationN;//根节点public const string configuration_ServerAddress ServerAddress;//子节点private string _ServerAddress;public string ServerAddress{get { return _ServerAddress; }set{_ServerAddress value;NotifyPropertyChanged(ServerAddress);}}public void Load(string path){try{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name configuration_ServerAddress){ServerAddress xn.InnerText;}}}catch(Exception ex){ }}public void Save(string path){try{XmlDocument xmlDocument new XmlDocument();xmlDocument.Load(path);XmlNodeList xnl xmlDocument.SelectSingleNode(managerNode).ChildNodes;foreach (XmlNode xn in xnl){if (xn.Name configuration_ServerAddress){xn.InnerText ServerAddress;}}xmlDocument.Save(path);}catch (Exception ex){ }}public event PropertyChangedEventHandler PropertyChanged;private void NotifyPropertyChanged(string propertyName){if (PropertyChanged ! null){PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}}public static ConfigurationManager Instance new ConfigurationManager();
}public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();Start();this.tb1.Text ConfigurationManager.Instance.ServerAddress.ToString();}private string path CONFIG\\System.xml;private void button1_Click(object sender, RoutedEventArgs e){ConfigurationManager.Instance.ServerAddress this.tb1.Text;ConfigurationManager.Instance.Save(path);}private void button2_Click(object sender, RoutedEventArgs e){Application.Current.Shutdown();}private void Start(){ConfigurationManager.Instance.Load(path);}
}