C#对XML进行操作

一、XML基础知识

1、简介

XML全称Extensible Markup Language,是一种可拓展的语言,主要作用是用来存取数据的,同时是国际通用的一种特殊格式,存取不受不同平台的影响;后缀为.xml,常见的文本编辑器都可以打开XML,我个人一般都是直接使用IDE打开的

2、创建

首先在桌面上创建一个文本文件,之后将文本文件的后缀修改成.xml,一个xml文件就创建完了。

3、构成

二、C#对于XML文件的操作

1、创建XML文件

编辑XML相关代码需要引用命名空间:System.Xml;

    /// <summary>
    /// 创建Xml文件
    /// </summary>
    /// <param name="savePath">保存xml文件的路径</param>
    /// <param name="nodeInfoDic">节点信息字典(节点名和节点内容)</param>
    /// <param name="nodeAttributeDic">节点特性字典(节点特性名和特性内容)</param>
    void CreateXmlFile(string savePath, Dictionary<string, string> nodeInfoDic,
        Dictionary<string, string> nodeAttributeDic)
    {
        XmlDocument xmlDocument = new XmlDocument(); //创建一个Xml文档对象
        XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", ""); //给xml文件添加xml版本和文本格式
        xmlDocument.AppendChild(xmlDeclaration); //将创建的第一行的内容插入到xml文件中
        XmlElement rootNode = xmlDocument.CreateElement("RootNode"); //创建根节点
        xmlDocument.AppendChild(rootNode); //将根节点插入到xml文件中
        foreach (KeyValuePair<string, string> nodeInfo in nodeInfoDic) //遍历节点内容字典,设置节点的名字以及内容
        {
            XmlElement tempNode = xmlDocument.CreateElement(nodeInfo.Key);
            tempNode.InnerText = nodeInfo.Value;
            foreach (KeyValuePair<string, string> nodeAttribute in nodeAttributeDic) //遍历节点属性字典,设置节点的属性名以及内容
            {
                if (!string.IsNullOrEmpty(nodeAttribute.Key))
                {
                    tempNode.SetAttribute(nodeAttribute.Key, nodeAttribute.Value);
                }
            }
        }

        xmlDocument.Save(savePath);
    }
2、读取XML文件

读取xml文件理解可以参考树,首先要确定根节点,然后找到所需节点,获取改节点的内容和属性等;具体实现可以参考下列代码:

    /// <summary>
    /// 读取Xml文件
    /// </summary>
    /// <param name="readPath"></param>
    void ReadXmlFile(string readPath)
    {
        XmlDocument xmlDocument = new XmlDocument(); //创建一个xml文本对象
        xmlDocument.Load(readPath); //加载需要读取的xml对象
        XmlNode rootNode = xmlDocument.SelectSingleNode("RootNode"); //加载根节点
        XmlNodeList xmlNodeList = rootNode.SelectNodes("需要查找的节点名(多个),如果查找单个节点可以参考查找根节点");
        foreach (XmlNode xmlNode in xmlNodeList)
        {
            Debug.LogError(xmlNode.InnerText);
            Debug.LogError(xmlNode.Attributes["特性名"].Value);
        }
    }

三、XML序列化

1、序列化与反序列化简介

个人理解:序列化就是将对象信息存储在配置文件中;反序列化就是从配置文件中读取对象信息

2、实现XML序列化与反序列化
 /// <summary>
    /// 保存数据
    /// </summary>
    /// <param name="savePath">保存数据的路径</param>
    /// <param name="obj">需要保存数据的对象</param>
    void SaveXMLData(string savePath, Object obj)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
        StreamWriter streamWriter = new StreamWriter(savePath);
        xmlSerializer.Serialize(streamWriter,obj);
    }

    /// <summary>
    /// 加载数据
    /// </summary>
    /// <param name="loadPath"></param>
    void LoadXMLData(string loadPath)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Type));//其中Type是需要解析的对象的类型
        StreamReader streamReader = new StreamReader(loadPath);
        xmlSerializer.Deserialize(streamReader);
    }

四、总结

1、xml序列化不支持字典序列化

2、在使用序列化和反序列化的时候也可以使用using来进行垃圾回收

3、本文主要是记录C#对于XML文件的操作,如有错误希望大佬们指出,我会及时修改

回答: 在C#中,我们可以使用XmlReader和XmlDocument类来对XML文件进行操作。 使用XmlReader类,可以按顺序读取XML文件的内容,并执行相应的操作。首先,我们需要创建一个XmlReaderSettings对象,并设置一些选项,比如忽略空白和注释。然后,使用XmlReader.Create方法创建一个XmlReader实例,并传入文件路径和XmlReaderSettings对象。接下来,可以使用while循环和Read方法来遍历XML文件的节点,并执行相应的操作。\[1\] 使用XmlDocument类,可以加载整个XML文件,并使用XPath表达式来选择和操作XML节点。首先,我们需要实例化一个XmlDocument对象,并使用Load方法加载XML文件,文件路径为绝对路径。然后,可以使用SelectSingleNode方法和XPath表达式来选择特定的节点。如果需要选择节点的子节点,可以使用ChildNodes属性将子节点集合成一个列表。\[2\] 下面是一个XML文件的示例: <bookstore> <book category="CHILDREN"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> 使用C#XML文件进行操作,可以根据具体需求选择使用XmlReader或XmlDocument类。 #### 引用[.reference_title] - *1* *2* *3* [C#解析XML文件](https://blog.csdn.net/simplenthpower/article/details/128669633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值