文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#读写xml文件的方法是什么

2023-07-05 04:59

关注

这篇“C#读写xml文件的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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=.;DataBase=HGSTUDY;uid=sa;pwd=yao"))            {                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 firstxmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));//Create the root node and append into docvar el = xmlDoc.CreateElement("Contacts");xmlDoc.AppendChild(el);// ContactXmlElement elementContact = xmlDoc.CreateElement("Contact");XmlAttribute attrID = xmlDoc.CreateAttribute("id");attrID.Value = "01";elementContact.Attributes.Append(attrID);el.AppendChild(elementContact);// Contact NameXmlElement elementName = xmlDoc.CreateElement("Name");elementName.InnerText = "Daisy Abbey";elementContact.AppendChild(elementName);// Contact GenderXmlElement 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”);
删除节点title:xe.RemoveChild(xe2);

示例:写入xml

1、创建xml文档
public void CreateXMLDocument(){    XmlDocument xmlDoc = new XmlDocument();          //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>    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 version="1.0" encoding="GB2312"?>-<Employees>-  <Node ISB="2-3631-4" Name="薪薪代码">    <title>学习VS</title>-    <price>      <weight>20</weight>    </price>  </Node></Employees>
2 、增加节点
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);//添加节点到Node2root.AppendChild(xe1);//添加节点到EmployeesxmlDoc.Save("D:\\book.xml");

结果:

<?xml version="1.0" encoding="GB2312"?>  -<Employees>    -<Node ISB="2-3631-4" Name="薪薪代码">      <title>学习VS</title>-      <price>        <weight>20</weight>      </price>    </Node>-    <Node2 Name="张三">      <title>心情好</title>    </Node2>-    <Node2 Name="张三">      <title>心情好</title>    </Node2></Employees>
3 、修改节点:
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的属性转换为XmlElement  if (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 version="1.0" encoding="GB2312"?>-<Employees>-<Node ISB="2-3631-4" Name="薪薪"><title>今天天气不好</title>-<price><weight>88</weight></price></Node>-<Node2 Name="张三"><title>心情好</title></Node2></Employees>
4 、删除节点
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的属性转换为XmlElement     xe.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 version="1.0" encoding="GB2312"?>-<Employees>-<Node ISB="2-3631-4" Name="薪薪">-<price><weight>20</weight></price></Node>-<Node2 Name="张三"><title>心情好</title></Node2>-<Node2 Name="张三"><title>心情好</title></Node2></Employees>

c#读取xml文件

xml文件如下:

<?xml version="1.0" encoding="utf-8" ?><configurationN>    <ServerAddress>1143</ServerAddress>    <ID>192.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);        }}

以上就是关于“C#读写xml文件的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯