C# - XMLHelper :一个操作XML的简单类库

这篇具有很好参考价值的文章主要介绍了C# - XMLHelper :一个操作XML的简单类库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下午写了一个操作XML文件的类库,后来不用了,水篇文章存个档📋

整体功能

XMLHelper.cs主要提供以下功能:

  1. 加载XML文件:从文件路径或字符串中加载XML文档,并返回XmlDocument对象。
  2. 保存XML文件:将XmlDocument对象保存为XML文件。
  3. 读取XML文件到DataTable:将XML文件中的数据读取到DataTable对象中。
  4. 生成XML文件:生成一个新的XML文件,并指定根节点名称。
  5. DataTable更新XML文件:将DataTable对象中的数据更新到XML文件中。
  6. 获取节点值:根据XPath表达式获取指定节点的值。
  7. 设置节点值:根据XPath表达式设置指定节点的值。
  8. 获取属性值:根据XPath表达式和属性名称获取指定节点的属性值。
  9. 设置属性值:根据XPath表达式和属性名称设置指定节点的属性值。
  10. 更新文件中的节点值:根据文件路径、XPath表达式和值更新XML文件中的节点值。
  11. 更新文件中的属性值:根据文件路径、XPath表达式、属性名称和值更新XML文件中的属性值。

没用 LINQ To XML 语法糖🧬

XMLHelper.cs

using System;
using System.Data;
using System.Xml;

namespace XMLHelper
{
    class XMLHelper
    {
        private XmlDocument xmlDoc;

        public XMLHelper()
        {
            xmlDoc = new XmlDocument();
        }

        // 从文件路径或字符串中加载XML文档,并返回XmlDocument对象
        public XmlDocument LoadXmlDocumentFromFile(string filePath)
        {
            try
            {
                xmlDoc.Load(filePath);
                return xmlDoc;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error loading XML document from file: " + ex.Message);
                return null;
            }
        }

        // 从一个XML字符串加载XML文档,并返回XmlDocument对象
        public XmlDocument LoadXmlDocumentFromString(string xmlString)
        {
            try
            {
                xmlDoc.LoadXml(xmlString);
                return xmlDoc;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error loading XML document from string: " + ex.Message);
                return null;
            }
        }

        // 保存XML文件:将XmlDocument对象保存为XML文件
        public void SaveXmlDocument(XmlDocument xmlDoc, string filePath)
        {
            try
            {
                xmlDoc.Save(filePath);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error saving XML document: " + ex.Message);
            }
        }

        // 生成一个新的XML文件,并指定根节点名称
        public void GenerateXmlFile(string filePath, string rootElementName)
        {
            try
            {
                xmlDoc = new XmlDocument();
                XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
                XmlNode rootNode = xmlDoc.CreateElement(rootElementName);
                xmlDoc.AppendChild(xmlDeclaration);
                xmlDoc.AppendChild(rootNode);
                xmlDoc.Save(filePath);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error generating XML file: " + ex.Message);
            }
        }

        /// <summary>
        /// 读取XML文件到DataTable:将XML文件中的数据读取到DataTable对象中
        /// </summary>
        /// <param name="xmlDoc">XmlDocument对象</param>
        /// <param name="xpath">节点集合的 XPath 表达式 - 例如"/Roots/Child"</param>
        /// <returns>DataTable对象</returns>
        public DataTable ReadXmlToDataTable(XmlDocument xmlDoc,string xpath)
        {
            try
            {
                DataTable dataTable = new DataTable();

                XmlNodeList nodes = xmlDoc.SelectNodes(xpath);
                foreach (XmlNode node in nodes)
                {
                    if (dataTable.Columns.Count == 0)
                    {
                        foreach (XmlNode childNode in node.ChildNodes)
                        {
                            dataTable.Columns.Add(childNode.Name, typeof(string));
                        }
                    }

                    DataRow row = dataTable.NewRow();
                    foreach (XmlNode childNode in node.ChildNodes)
                    {
                        row[childNode.Name] = childNode.InnerText;
                    }

                    dataTable.Rows.Add(row);
                }

                return dataTable;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error reading XML document to DataTable: " + ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 将DataTable对象中的数据更新到XML文件中
        /// </summary>
        /// <param name="xmlDoc">XmlDocument对象</param>
        /// <param name="dataTable">DataTable对象</param>
        /// <param name="elementName">子节点值</param>
        public void UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable,string elementName)
        {
            try
            {
                xmlDoc.DocumentElement.RemoveAll();

                foreach (DataRow row in dataTable.Rows)
                {
                    XmlElement measurementPointElement = xmlDoc.CreateElement(elementName);

                    foreach (DataColumn column in dataTable.Columns)
                    {
                        XmlElement element = xmlDoc.CreateElement(column.ColumnName);
                        element.InnerText = row[column.ColumnName].ToString();
                        measurementPointElement.AppendChild(element);
                    }

                    xmlDoc.DocumentElement.AppendChild(measurementPointElement);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error updating XML from DataTable: " + ex.Message);
            }
        }

        // 根据XPath表达式获取指定节点的值
        public string GetNodeValue(XmlDocument xmlDoc, string xpath)
        {
            XmlNode node = xmlDoc.SelectSingleNode(xpath);
            return node?.InnerText;
        }

        // 根据XPath表达式设置指定节点的值
        public void SetNodeValue(XmlDocument xmlDoc, string xpath, string value)
        {
            XmlNode node = xmlDoc.SelectSingleNode(xpath);
            if (node != null)
                node.InnerText = value;
        }

        // 根据XPath表达式和属性名称获取指定节点的属性值
        public string GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName)
        {
            XmlNode node = xmlDoc.SelectSingleNode(xpath);
            if (node != null && node.Attributes != null)
            {
                XmlAttribute attribute = node.Attributes[attributeName];
                return attribute?.Value;
            }
            return null;
        }

        // 根据XPath表达式和属性名称设置指定节点的属性值
        public void SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value)
        {
            XmlNode node = xmlDoc.SelectSingleNode(xpath);
            if (node != null && node.Attributes != null)
            {
                XmlAttribute attribute = node.Attributes[attributeName];
                if (attribute != null)
                    attribute.Value = value;
            }
        }

        // 根据文件路径、XPath表达式和值更新XML文件中的节点值
        public void UpdateNodeValueInFile(string filePath, string xpath, string value)
        {
            XmlDocument doc = LoadXmlDocumentFromFile(filePath);
            if (doc != null)
            {
                SetNodeValue(doc, xpath, value);
                SaveXmlDocument(doc, filePath);
            }
        }

        // 根据文件路径、XPath表达式、属性名称和值更新XML文件中的属性值
        public void UpdateAttributeValueInFile(string filePath, string xpath, string attributeName, string value)
        {
            XmlDocument doc = LoadXmlDocumentFromFile(filePath);
            if (doc != null)
            {
                SetAttributeValue(doc, xpath, attributeName, value);
                SaveXmlDocument(doc, filePath);
            }
        }
    }
}

异常处理就需要大家自由发挥了♻️

加载和保存XML文件

XMLHelper类库提供了两个方法,用于从文件路径或字符串中加载XML文档并返回XmlDocument对象,分别是:

public XmlDocument LoadXmlDocumentFromFile(string filePath)
public XmlDocument LoadXmlDocumentFromString(string xmlString)

可以使用这些方法将XML文件加载到XmlDocument对象中,方便后续的处理和操作,一个操作文件,一个操作XML结构的字符串,然后保存:

public void SaveXmlDocument(XmlDocument xmlDoc, string filePath)

这几个都是调用直接的方法,没什么可说的。

读取和更新XML文件

XMLHelper类库使得从XML文件中读取数据变得非常简单。其中,ReadXmlToDataTable方法允许将XML文件中的数据读取到DataTable对象中:

public DataTable ReadXmlToDataTable(XmlDocument xmlDoc, string xpath)

只需要提供XmlDocument对象和节点集合的XPath表达式(例如"/Roots/Child"),即可将XML文件中的数据读取到DataTable对象中。

另外,可以使用UpdateXmlFromDataTable方法将DataTable对象中的数据更新到XML文件中:

public void UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable, string elementName)

这个方法会清空XML文件并根据DataTable对象中的数据创建新的XML节点,并将其添加到XmlDocument对象中。

示例用法

// 创建XMLHelper对象
XMLHelper xmlHelper = new XMLHelper();

// 加载XML文件
XmlDocument xmlDoc = xmlHelper.LoadXmlDocumentFromFile("data.xml");

// 读取XML数据到DataTable
DataTable dataTable = xmlHelper.ReadXmlToDataTable(xmlDoc, "/Root/Element");

// 修改节点的值
dataTable.Rows[0]["Value"] = "New Value";

// 更新XML文件
xmlHelper.UpdateXmlFromDataTable(xmlDoc, dataTable, "Element");

// 保存XML文件
xmlHelper.SaveXmlDocument(xmlDoc, "data.xml");

读取和更新XML节点的值

XMLHelper还提供了一些方法用于读取和更新XML节点的值。以下是其中几个方法的示例:

string GetNodeValue(XmlDocument xmlDoc, string xpath)
public void SetNodeValue(XmlDocument xmlDoc, string xpath, string value)
public string GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName)
public void SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value)

这些方法允许你根据XPath表达式获取节点的文本值或属性值,并且可以更新节点的文本值或属性值。

示例用法

// 创建XMLHelper对象
XMLHelper xmlHelper = new XMLHelper();

// 加载XML文件
XmlDocument xmlDoc = xmlHelper.LoadXmlDocumentFromFile("data.xml");

// 读取节点的值
string nodeValue = xmlHelper.GetNodeValue(xmlDoc, "/Root/Element/Value");
Console.WriteLine("Node Value: " + nodeValue);

// 更新节点的值
string newValue = "New Value";
xmlHelper.SetNodeValue(xmlDoc, "/Root/Element/Value", newValue);
Console.WriteLine("Node Value updated.");

// 保存XML文件
xmlHelper.SaveXmlDocument(xmlDoc, "data.xml");

生成XML文件

除了加载、读取和更新XML文件,XMLHelper类库还提供了一个方法用于生成XML文件。你可以使用GenerateXmlFile方法创建一个空的XML文件,指定根元素的名称和文件路径:

public void GenerateXmlFile(string filePath, string rootElementName)

这个有点瑕疵,后面用到再改哈。

设计思路

ChatGPT did this

  1. LoadXmlDocumentFromFile(string filePath): XmlDocument
    • 功能:从指定文件路径加载XML文档。
    • 输入:文件路径。
    • 输出:加载成功返回XmlDocument对象,加载失败返回null。
    • 设计思路:使用XmlDocument的Load方法从文件路径加载XML文档,如果加载失败,则返回null。
  2. LoadXmlDocumentFromString(string xmlString): XmlDocument
    • 功能:从指定字符串加载XML文档。
    • 输入:XML字符串。
    • 输出:加载成功返回XmlDocument对象,加载失败返回null。
    • 设计思路:使用XmlDocument的LoadXml方法从字符串加载XML文档,如果加载失败,则返回null。
  3. GenerateXmlFile(string filePath, string rootElementName): void
    • 功能:生成一个新的XML文件,并指定根节点名称。
    • 输入:文件路径,根节点名称。
    • 输出:无。
    • 设计思路:创建一个新的XmlDocument对象,并使用指定的根节点名称创建根节点。然后使用XmlDocument的Save方法将XmlDocument对象保存为指定文件路径的XML文件。
  4. SaveXmlDocument(XmlDocument xmlDoc, string filePath): void
    • 功能:将XmlDocument对象保存为XML文件。
    • 输入:XmlDocument对象,文件路径。
    • 输出:无。
    • 设计思路:使用XmlDocument的Save方法将XmlDocument对象保存为指定文件路径的XML文件。
  5. ReadXmlToDataTable(XmlDocument xmlDoc): DataTable
    • 功能:将XML文件中的数据读取到DataTable对象中。
    • 输入:XmlDocument对象。
    • 输出:读取成功返回DataTable对象,读取失败返回null。
    • 设计思路:使用XmlDocument的SelectNodes方法选取指定XPath表达式的节点集合,遍历节点集合,并根据节点的子节点创建DataTable的列。然后遍历每个节点,将子节点的名称和文本内容作为DataTable的行数据。最后返回DataTable对象。
  6. UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable, string elementName): void
    • 功能:将DataTable对象中的数据更新到XML文件中。
    • 输入:XmlDocument对象,DataTable对象,要更新的节点元素名称。
    • 输出:无。
    • 设计思路:首先清空XmlDocument的根节点下的所有子节点。然后遍历DataTable的每一行,创建一个新的XmlElement,并根据DataTable的列名和行数据设置XmlElement的子节点。最后将新的XmlElement添加到XmlDocument的根节点下。
  7. GetNodeValue(XmlDocument xmlDoc, string xpath): string
    • 功能:根据XPath表达式获取指定节点的值。
    • 输入:XmlDocument对象,XPath表达式。
    • 输出:节点的值,如果节点不存在则返回null。
    • 设计思路:使用XmlDocument的SelectSingleNode方法根据XPath表达式选取指定节点,然后返回节点的InnerText。
  8. SetNodeValue(XmlDocument xmlDoc, string xpath, string value): void
    • 功能:根据XPath表达式设置指定节点的值。
    • 输入:XmlDocument对象,XPath表达式,要设置的值。
    • 输出:无。
    • 设计思路:使用XmlDocument的SelectSingleNode方法根据XPath表达式选取指定节点,然后将节点的InnerText设置为指定的值。
  9. GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName): string
    • 功能:根据XPath表达式和属性名称获取指定节点的属性值。
    • 输入:XmlDocument对象,XPath表达式,属性名称。
    • 输出:属性的值,如果属性不存在则返回null。
    • 设计思路:使用XmlDocument的SelectSingleNode方法根据XPath表达式选取指定节点,然后根据属性名称获取属性的值。
  10. SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value): void
    • 功能:根据XPath表达式和属性名称设置指定节点的属性值。
    • 输入:XmlDocument对象,XPath表达式,属性名称,要设置的值。
    • 输出:无。
    • 设计思路:使用XmlDocument的SelectSingleNode方法根据XPath表达式选取指定节点,然后根据属性名称设置属性的值。
  11. UpdateNodeValueInFile(string filePath, string xpath, string value): void
    • 功能:根据文件路径、XPath表达式和值更新XML文件中的节点值。
    • 输入:文件路径,XPath表达式,要设置的值。
    • 输出:无。
    • 设计思路:首先从文件路径加载XML文档,然后调用SetNodeValue函数设置指定节点的值,最后保存XML文档到文件。
  12. UpdateAttributeValueInFile(string filePath, string xpath, string attributeName, string value): void
    • 功能:根据文件路径、XPath表达式、属性名称和值更新XML文件中的属性值。
    • 输入:文件路径,XPath表达式,属性名称,要设置的值。
    • 输出:无。
    • 设计思路:首先从文件路径加载XML文档,然后调用SetAttributeValue函数设置指定节点的属性值,最后保存XML文档到文件。

Done!!!文章来源地址https://www.toymoban.com/news/detail-499823.html

到了这里,关于C# - XMLHelper :一个操作XML的简单类库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【传统视觉】C#创建、封装、调用类库

    任务 因为实现代码相对简单,然后又没有使用Opencv,所以就直接用C#实现,C#调用。 1.创建类库 1.1新建一个类库 vs2015 = 文件 = 新建 = 项目 1.2添加一个接口 为了方便后续可维护,我还添加了接口,而不是直接调用类中的方法;在上述类库中 = 添加 = 接口 2.创建一个demo 告诉软

    2024年02月14日
    浏览(21)
  • C# 任务并行类库Parallel调用示例

    Task Parallel Library 是微软.NET框架基础类库(BCL)中的一个,主要目的是为了简化并行编程,可以实现在不同的处理器上并行处理不同任务,以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法。

    2024年02月04日
    浏览(28)
  • C#实现一个简单的日志类

    目录 自定义日志类 NLog版本的日志类 Serilog版本的日志类 上个月换工作,新项目又要重新搭建基础框架,把日志实现部分单独记录下来方便以后参考。 代码大部分使用ChatGPT生成,人工进行了测试和优化,主要特点: 线程安全,日志异步写入文件不影响业务逻辑 支持过期文件

    2024年02月10日
    浏览(27)
  • C#开源克隆类库DeepCloner的功能、优点与妙用

    在开发过程中有时候我们需要对现有对象进行克隆,我们可以使用DeepCloner类库来完成这个需求功能。 深度克隆:  DeepCloner 提供深度克隆对象的能力,递归地克隆对象图中的所有引用类型属性。 循环引用处理:  能够处理对象图中的循环引用,防止无限递归。 自定义克隆行

    2024年02月05日
    浏览(26)
  • 【使用C#建立一个简单的员工管理系统】

    1.使用到的软件Microsoft Visual Studio(用来设计和编写WindowsForms程序)、Microsoft SQL Server(用来储存员工的信息并且与Microsoft Visual Studio进行连接进行增删查改的操作)。 2.项目由三层架构的设计方式来编写代码 UI(表现层)、BLL:(业务逻辑层)、DAL:(数据访问层)、(Model)作为数据传递的载

    2024年02月01日
    浏览(25)
  • C#简单操作:C#中List常用方法 判断存在、查找、排序

    目常用List来进行数据操作管理,有一些方法经常百度,所以这里记录下。 目录 1. List判断元素是否存在,返回bool 2. List查找,返回对象 3. List排序 4. 对象属性打印 5. List 其他方法  

    2024年02月11日
    浏览(32)
  • 发布 VectorTraits v1.0,它是 C# 下增强SIMD向量运算的类库

    VectorTraits: SIMD Vector type traits methods (SIMD向量类型的特征方法). NuGet: https://www.nuget.org/packages/VectorTraits/1.0.0 源代码: https://github.com/zyl910/VectorTraits 总所周知,使用SIMD指令集,能够加速 多媒体处理(图形、图像、音频、视频...)、人工智能、科学计算 等。 然而,传统的SIMD编程存

    2024年02月09日
    浏览(32)
  • Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

    本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整理出更多细节,尤其是我遇到的坑,以便和我一样的新手小白上手。后续我还准备单独分

    2024年02月08日
    浏览(31)
  • 📦MysqlHelper——一个便捷的MySQL导入导出的助手类库

    MysqlHelper 是一个便捷的 通过PHP导入和导出Mysql数据库表结构和数据 的工具,可以快速实现mysql的数据库的导入和导出. 简单易用: 仅依赖 mysqlli 扩展, 开箱即用 灵活操作: 兼容主流框架,使用更方便 长期维护: 作者为自由职业者,保证项目的 长期稳定 和 持续更新 通过Composer导入类

    2024年02月10日
    浏览(26)
  • 基于MSTest框架创建一个简单的C#单元测试(Visual Studio 2019版)

    目录 1、环境准备 2、创建一个被测试项目 3、创建单元测试项目 4、执行测试 5、说明   环境: IDE: Visual Studio 2019 单元测试框架:MSTest .NET 版本:.NET Core 3.1 Test.Sdk版本:Microsoft.NET.Test.Sdk 16.9.4 目的: 编写单元测试方法以验证   BankAccount   类的   Debit   方法,至少需要检查

    2023年04月26日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包