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

其他教程   发布日期:2023年06月28日   浏览次数:404

这篇“C#读写xml文件的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#读写xml文件的方法是什么”文章吧。

    C#写入xml文件

    1、XmlDocument

    1。我认为是最原始,最基本的一种:利用XmlDocument向一个XML文件里写节点,然后再利用XmlDocument保存文件。
    首先加载要写入的XML文件,但是如果没有的,就要新建,在新建的过程中,要有写入的代码;

    1. XmlDocument doc = new XmlDocument();
    2. try
    3. {
    4. doc.Load("new.xml");
    5. }
    6. catch
    7. {
    8. XmlTextWriter xtw = new XmlTextWriter("new.xml", Encoding.UTF8);
    9. //新建XML文件
    10. xtw.WriteStartDocument();
    11. xtw.WriteStartElement("gnode");
    12. // gnode根节点
    13. xtw.WriteStartElement("myxm1");
    14. // gnode根节点下的元素myxmls
    15. xtw.WriteEndElement();
    16. xtw.WriteEndElement();
    17. xtw.WriteEndDocument();
    18. xtw.Close();
    19. doc.Load("new.xml");
    20. }
    21. XmlNode xn = doc.DocumentElement;
    22. //找到根节点
    23. XmlElement xe = doc.CreateElement("myxml2");
    24. //在根节点下创建元素,如果是属性,则用XmlAttribute;
    25. xe.InnerText = "薪薪代码hahaha";
    26. //给子节点写入文本节点(值)
    27. xn.AppendChild(xe);
    28. //根节点将其纳入
    29. doc.Save("new2.xml");
    30. //利用XmlDocument保存文件
    31. }

    注意点:在新建根节点的时候,WriteStartElement,只能嵌套,也就是只能有一个根节点。

    2、DataSet对象里的值来生成XML文件

    应用到数据库,将数据库的DataSet对象里的值来生成XML文件的元素;

    1. using (SqlConnection con = new SqlConnection("Server=.;DataBase=HGSTUDY;uid=sa;pwd=yao"))
    2. {
    3. con.Open();
    4. SqlCommand command = new SqlCommand("select * from GL_STUDY", con);
    5. command.CommandType = CommandType.Text;
    6. DataSet ds = new DataSet("DATASET");
    7. //DATASET将成为XML文件中的根节点名称,否则系统将其命名为NewDataSet
    8. SqlDataAdapter sda = new SqlDataAdapter();
    9. sda.SelectCommand = command;
    10. sda.Fill(ds, "DATATABLE");
    11. //DATATABLE为所生成XML文件中的子节点名称,否则系统将其命名为Table。
    12. ds.WriteXml("dbxml.xml");
    13. // DataSet的方法WriteXml将数据写入到XML文件,就是这么一句话。如果不保存到文件,直接ds.GetXML()
    14. }

    3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。

    用一个字符串作为一个XML文档中的xmlAttribute或xmlElement。[其元素或属性由类的定义来设置(xml串行化)]

    using System;System.xml.Serialization;

    先初始化一个类,设置属性值

    1. var xmlDoc = new XmlDocument();
    2. //Create the xml declaration first
    3. xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
    4. //Create the root node and append into doc
    5. var el = xmlDoc.CreateElement("Contacts");
    6. xmlDoc.AppendChild(el);
    7. // Contact
    8. XmlElement elementContact = xmlDoc.CreateElement("Contact");
    9. XmlAttribute attrID = xmlDoc.CreateAttribute("id");
    10. attrID.Value = "01";
    11. elementContact.Attributes.Append(attrID);
    12. el.AppendChild(elementContact);
    13. // Contact Name
    14. XmlElement elementName = xmlDoc.CreateElement("Name");
    15. elementName.InnerText = "Daisy Abbey";
    16. elementContact.AppendChild(elementName);
    17. // Contact Gender
    18. XmlElement elementGender = xmlDoc.CreateElement("Gender");
    19. elementGender.InnerText = "female";
    20. elementContact.AppendChild(elementGender);
    21. xmlDoc.Save("test1.xml");

    建XmlSerializer实例

    1. class XXX {
    2. XmlSerializer ser = new XmlSerializer(Type.GetType("forxml.truck"));
    3. Truck tr = new Truck();
    4. tr.ID = 1;
    5. tr.cheID = "赣A T34923";
    6. }

    Serialize方法–完成对类的串行化

    1. XmlTextWriter xtw = new XmlTextWriter("myxml.xml",Encoding.UTF8);
    2. XmlTextWriter 创建一个XML文件
    3. ser.Serialize(xtw, tr);
    4. //如果只想显示,可以直接ser.Serialize(Console.Out, tr);
    5. }

    xml常用方法:
    定义xml文档:XmlDocument xmlDoc = new XmlDocument();
    初始化xml文档:xmlDoc.Load(“D:ook.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文档

    1. public void CreateXMLDocument()
    2. {
    3. XmlDocument xmlDoc = new XmlDocument();
    4. //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
    5. XmlDeclaration xmlDeclar;
    6. xmlDeclar = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
    7. xmlDoc.AppendChild(xmlDeclar);
    8. //加入Employees根元素
    9. XmlElement xmlElement = xmlDoc.CreateElement("", "Employees", "");
    10. xmlDoc.AppendChild(xmlElement);
    11. //添加节点
    12. XmlNode root = xmlDoc.SelectSingleNode("Employees");
    13. XmlElement xe1 = xmlDoc.CreateElement("Node");
    14. xe1.SetAttribute("Name", "薪薪代码");
    15. xe1.SetAttribute("ISB", "2-3631-4");
    16. //添加子节点
    17. XmlElement xeSub1 = xmlDoc.CreateElement("title");
    18. xeSub1.InnerText = "学习VS";
    19. xe1.AppendChild(xeSub1);
    20. XmlElement xeSub2 = xmlDoc.CreateElement("price");
    21. xe1.AppendChild(xeSub2);
    22. XmlElement xeSub3 = xmlDoc.CreateElement("weight");
    23. xeSub3.InnerText = "20";
    24. xeSub2.AppendChild(xeSub3);
    25. root.AppendChild(xe1);
    26. xmlDoc.Save("D:ook.xml");//保存的路径
    27. }

    生成的xml文件如下:

    1. <?xml version="1.0" encoding="GB2312"?>
    2. -<Employees>-
    3.   <Node ISB="2-3631-4" Name="薪薪代码">
    4.     <title>学习VS</title>-
    5.     <price>
    6.       <weight>20</weight>
    7.     </price>
    8.   </Node>
    9. </Employees>

    2 、增加节点

    1. XmlDocument xmlDoc = new XmlDocument();
    2. xmlDoc.Load("D:ook.xml");//找到xml文件
    3. XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找Employees节点
    4. XmlElement xe1 = xmlDoc.CreateElement("Node2");//添加Node2节点
    5. xe1.SetAttribute("Name", "张飞");
    6. XmlElement xeSub1 = xmlDoc.CreateElement("title");//定义子节点
    7. xeSub1.InnerText = "心情好";
    8. xe1.AppendChild(xeSub1);//添加节点到Node2
    9. root.AppendChild(xe1);//添加节点到Employees
    10. xmlDoc.Save("D:ook.xml");

    结果:

    1. <?xml version="1.0" encoding="GB2312"?>
    2.   -<Employees>
    3.     -<Node ISB="2-3631-4" Name="薪薪代码">
    4.       <title>学习VS</title>-
    5.       <price>
    6.         <weight>20</weight>
    7.       </price>
    8.     </Node>-
    9.     <Node2 Name="张三">
    10.       <title>心情好</title>
    11.     </Node2>-
    12.     <Node2 Name="张三">
    13.       <title>心情好</title>
    14.     </Node2>
    15. </Employees>

    3 、修改节点:

    1. public void ModifyNode()
    2. {
    3. XmlDocument xmlDocument = new XmlDocument();
    4. xmlDocument.Load("D:ook.xml");
    5. XmlNodeList nodeList = xmlDocument.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点
    6. foreach (XmlNode xn in nodeList)//遍历
    7. {
    8. XmlElement xe = (XmlElement)xn;
    9. if (xe.GetAttribute("Name") == "薪薪代码")
    10. {
    11. xe.SetAttribute("Name", "薪薪");//更改节点的属性
    12. XmlNodeList xnl = xe.ChildNodes;//获取xe的所有子节点
    13. foreach (XmlNode xn1 in xnl)
    14. {
    15. XmlElement xe2 = (XmlElement)xn1;//将节点xn1的属性转换为XmlElement
    16. if (xe2.Name == "title")//找到节点名字为title的节点
    17. {
    18. xe2.InnerText = "今天天气不好";
    19. }
    20. if (xe2.Name == "price")
    21. {
    22. XmlNodeList xnl2 = xe2.ChildNodes;
    23. foreach (XmlNode xn2 in xnl2)
    24. {
    25. if (xn2.Name == "weight")
    26. {
    27. xn2.InnerText = "88";
    28. }
    29. }
    30. }
    31. }
    32. }
    33. }
    34. xmlDocument.Save("D:ook2.xml");
    35. }

    运行结果:

    1. <?xml version="1.0" encoding="GB2312"?>
    2. -<Employees>
    3. -<Node ISB="2-3631-4" Name="薪薪">
    4. <title>今天天气不好</title>-<price>
    5. <weight>88</weight>
    6. </price>
    7. </Node>
    8. -<Node2 Name="张三">
    9. <title>心情好</title>
    10. </Node2></Employees>

    4 、删除节点

    1. public void DeleteNode()
    2. {
    3. XmlDocument xmlDocument = new XmlDocument();
    4. xmlDocument.Load("D:ook1.xml");
    5. XmlNodeList xnl = xmlDocument.SelectSingleNode("Employees").ChildNodes;
    6. foreach (XmlNode xn in xnl)
    7. {
    8. if (xn.Name == "Node")
    9. {
    10. XmlElement xe = (XmlElement)xn;//将xn的属性转换为XmlElement
    11. xe.RemoveAttribute("ID");//移除xe的ID属性
    12. XmlNodeList xnl2 = xe.ChildNodes;
    13. for (int i = 0; i < xnl2.Count; i++)
    14. {
    15. XmlElement xe2 = (XmlElement)xnl2.Item(i);
    16. if (xe2.Name == "title")
    17. {
    18. xe.RemoveChild(xe2);//删除节点title
    19. }
    20. }
    21. }
    22. }
    23. xmlDocument.Save("D:ook3.xml");
    24. }

    结果:

    1. <?xml version="1.0" encoding="GB2312"?>
    2. -<Employees>
    3. -<Node ISB="2-3631-4" Name="薪薪">-<price>
    4. <weight>20</weight>
    5. </price>
    6. </Node>-
    7. <Node2 Name="张三">
    8. <title>心情好</title>
    9. </Node2>-
    10. <Node2 Name="张三">
    11. <title>心情好</title>
    12. </Node2>
    13. </Employees>

    c#读取xml文件

    xml文件如下:

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <configurationN>
    3. <ServerAddress>1143</ServerAddress>
    4. <ID>192.168</ID>
    5. </configurationN>

    在写入xml文件时,最主要使用了两个方法:Load和Save。

    Load:初始化xml文档,以便项目文件获取具体的xml节点的值。

    1. public void Load(string path)
    2. {
    3. try
    4. {
    5. XmlDocument xmlDocument = new XmlDocument();
    6. xmlDocument.Load(path);
    7. XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
    8. foreach (XmlNode xn in xnl)
    9. {
    10. if (xn.Name == configuration_ServerAddress)
    11. {
    12. ServerAddress = xn.InnerText;
    13. }
    14. }
    15. }
    16. catch(Exception ex)
    17. { }
    18. }

    Save:在项目系统中进行修改配置文件值后,需要对xml进行重新保存

    1. public void Save(string path)
    2. {
    3. try
    4. {
    5. XmlDocument xmlDocument = new XmlDocument();
    6. xmlDocument.Load(path);
    7. XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
    8. foreach (XmlNode xn in xnl)
    9. {
    10. if (xn.Name == configuration_ServerAddress)
    11. {
    12. xn.InnerText = ServerAddress;
    13. }
    14. }
    15. xmlDocument.Save(path);
    16. }
    17. catch (Exception ex)
    18. { }
    19. }

    此处将所有代码都贴出来,方便下次实现。因为项目是WPF文件,而且都是简单控件,所以只贴出后台代码。

    1. class ConfigurationManager:INotifyPropertyChanged
    2. {
    3. public const string managerNode = "configurationN";//根节点
    4. public const string configuration_ServerAddress = "ServerAddress";//子节点
    5. private string _ServerAddress;
    6. public string ServerAddress
    7. {
    8. get { return _ServerAddress; }
    9. set
    10. {
    11. _ServerAddress = value;
    12. NotifyPropertyChanged("ServerAddress");
    13. }
    14. }
    15. public void Load(string path)
    16. {
    17. try
    18. {
    19. XmlDocument xmlDocument = new XmlDocument();
    20. xmlDocument.Load(path);
    21. XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
    22. foreach (XmlNode xn in xnl)
    23. {
    24. if (xn.Name == configuration_ServerAddress)
    25. {
    26. ServerAddress = xn.InnerText;
    27. }
    28. }
    29. }
    30. catch(Exception ex)
    31. { }
    32. }
    33. public void Save(string path)
    34. {
    35. try
    36. {
    37. XmlDocument xmlDocument = new XmlDocument();
    38. xmlDocument.Load(path);
    39. XmlNodeList xnl = xmlDocument.SelectSingleNode(managerNode).ChildNodes;
    40. foreach (XmlNode xn in xnl)
    41. {
    42. if (xn.Name == configuration_ServerAddress)
    43. {
    44. xn.InnerText = ServerAddress;
    45. }
    46. }
    47. xmlDocument.Save(path);
    48. }
    49. catch (Exception ex)
    50. { }
    51. }
    52. public event PropertyChangedEventHandler PropertyChanged;
    53. private void NotifyPropertyChanged(string propertyName)
    54. {
    55. if (PropertyChanged != null)
    56. {
    57. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    58. }
    59. }
    60. public static ConfigurationManager Instance = new ConfigurationManager();
    61. }
    62. public partial class MainWindow : Window
    63. {
    64. public MainWindow()
    65. {
    66. InitializeComponent();
    67. Start();
    68. this.tb1.Text = ConfigurationManager.Instance.ServerAddress.ToString();
    69. }
    70. private string path = "CONFIGSystem.xml";
    71. private void button1_Click(object sender, RoutedEventArgs e)
    72. {
    73. ConfigurationManager.Instance.ServerAddress = this.tb1.Text;
    74. ConfigurationManager.Instance.Save(path);
    75. }
    76. private void button2_Click(object sender, RoutedEventArgs e)
    77. {
    78. Application.Current.Shutdown();
    79. }
    80. private void Start()
    81. {
    82. ConfigurationManager.Instance.Load(path);
    83. }
    84. }

    以上就是C#读写xml文件的方法是什么的详细内容,更多关于C#读写xml文件的方法是什么的资料请关注九品源码其它相关文章!