XML工具(相关增、删、改、查)

哈喽,来到新公司,下午没什么事,先写个xml工具类,后面会用到,直接上代码

=====================================================================

using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.IO;

namespace ZYL
{

/// <summary>
/// xml工具类
/// </summary>
public class XmlHelp
{

    /// <summary>
    /// 记录当前节点下的所有子节点
    /// </summary>
    private static int sum = 0;


    /// <summary>
    /// 创建xml文档
    /// </summary>
    /// <param name="path">保存路径</param>
    public static XmlDocument CreateXml(string path)
    {

        XmlDocument xmlDocument = new XmlDocument();

        XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);

        XmlElement xmlElement = xmlDocument.CreateElement("Root");

        xmlDocument.AppendChild(xmlDeclaration);

        xmlDocument.AppendChild(xmlElement);

        xmlDocument.Save(path);

        return xmlDocument;

    }


    /// <summary>
    /// 创建xml文档
    /// </summary>
    /// <param name="path">保存路径</param>
    /// <param name="root">根目录名称</param>
    public static void CreateXml(string path, string root)
    {

        XmlDocument xmlDocument = CreateXml(path);

        XmlElement xmlElement1 = xmlDocument.DocumentElement;

        xmlDocument.RemoveChild(xmlElement1);

        XmlElement xmlElement = xmlDocument.CreateElement(root);

        xmlDocument.AppendChild(xmlElement);

        xmlDocument.Save(path);

    }



    /// <summary>
    /// 加载xml
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static XmlDocument LoadXml(string path)
    {

        if (File.Exists(path))
        {
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.Load(path);

            return xmlDocument;
        }

        return null;

    }


    /// <summary>
    /// 添加一级子节点
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="elementName">子节点名称</param>
    public static void AddXmlElement(string path, string elementName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement;

        XmlElement xmlElement1 = xmlDocument.CreateElement(elementName);

        xmlElement.AppendChild(xmlElement1);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 添加一级子节点
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="elementName">子节点名称</param>
    public static void AddXmlElement(XmlDocument xmlDocument, string elementName)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement;

        XmlElement xmlElement1 = xmlDocument.CreateElement(elementName);

        xmlElement.AppendChild(xmlElement1);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        //  Debug.Log(path);

        xmlDocument.Save(path);

    }



    /// <summary>
    /// 添加一级以上的嵌套节点
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="elementName">添加节点的名称</param>
    /// <param name="nodeName">嵌套节点名称(型式是:abcd/efgh)</param>
    public static void AddXmlElement(string path, string elementName, string nodeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlNode xmlNode = xmlDocument.DocumentElement.SelectSingleNode(nodeName);

        XmlElement xmlElement1 = xmlDocument.CreateElement(elementName);

        xmlNode.AppendChild(xmlElement1);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 添加一级以上的嵌套节点
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="elementName">添加节点的名称</param>
    /// <param name="nodeName">嵌套节点名称(型式是:abcd/efgh)</param>
    public static void AddXmlElement(XmlDocument xmlDocument, string elementName, string nodeName)
    {

        XmlNode xmlNode = xmlDocument.DocumentElement.SelectSingleNode(nodeName);

        XmlElement xmlElement1 = xmlDocument.CreateElement(elementName);

        xmlNode.AppendChild(xmlElement1);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);

    }



    /// <summary>
    /// 给节点添加属性
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="AttributeName">属性名称</param>
    /// <param name="AttributeValue">属性值</param>
    public static void AddXmlAttribute(string path, string nodeName, string AttributeName, string AttributeValue)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        xmlElement.SetAttribute(AttributeName, AttributeValue);

        xmlDocument.Save(path);


    }



    /// <summary>
    /// 给节点添加属性
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="AttributeName">属性名称</param>
    /// <param name="AttributeValue">属性值</param>
    public static void AddXmlAttribute(XmlDocument xmlDocument, string nodeName, string AttributeName, string AttributeValue)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        xmlElement.SetAttribute(AttributeName, AttributeValue);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 获取节点下属性总数
    /// </summary>
    /// <param name="path"></param>
    /// <param name="nodeName"></param>
    /// <returns></returns>
    public static int GetXmlAttributeCount(string path, string nodeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        return xmlElement.Attributes.Count;

    }



    /// <summary>
    /// 获取节点下的所有嵌套子节点总数
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">节点名称</param>
    /// <returns></returns>
    public static int GetXmlElementCount(string path, string nodeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        int count = GetRecursion(xmlElement);

        return count;

    }

    //递归
    private static int GetRecursion(XmlElement xmlElement)
    {

        for (int i = 0; i < xmlElement.ChildNodes.Count; i++)
        {
            XmlElement xml = xmlElement.ChildNodes[i] as XmlElement;

            if (xml.ChildNodes.Count > 0)
                GetRecursion(xml);

            sum++;
        }
        return sum;

    }



    /// <summary>
    /// 获取节点下所有属性
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">节点名称</param>
    /// <returns></returns>
    public static Dictionary<string, string> GetXmlAllAttribute(string path, string nodeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        Dictionary<string, string> keyValues = new Dictionary<string, string>();

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {

            keyValues.Add(xmlElement.Attributes[i].Name, xmlElement.Attributes[i].Value);

        }

        return keyValues;

    }


    /// <summary>
    /// 获取节点下所有属性
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="nodeName">节点名称</param>
    /// <returns></returns>
    public static Dictionary<string, string> GetXmlAllAttribute(XmlDocument xmlDocument, string nodeName)
    {

        Dictionary<string, string> keyValues = new Dictionary<string, string>();

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {

            keyValues.Add(xmlElement.Attributes[i].Name, xmlElement.Attributes[i].Value);

        }

        return keyValues;

    }





    /// <summary>
    /// 获取节点下的所有嵌套子节点
    /// </summary>
    /// <param name="path"></param>
    /// <param name="nodeName"></param>
    /// <returns></returns>
    public static List<string> GetXmlAllElement(string path, string nodeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        List<string> keyValues = new List<string>();

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        GetLoop(xmlElement, ref keyValues);

        return keyValues;


    }


    //递归
    private static void GetLoop(XmlElement xmlElement, ref List<string> valuePairs)
    {

        for (int i = 0; i < xmlElement.ChildNodes.Count; i++)
        {
            XmlElement xml = xmlElement.ChildNodes[i] as XmlElement;

            if (xml.ChildNodes.Count > 0)
                GetLoop(xml, ref valuePairs);

            valuePairs.Add(xml.Name);
        }


    }



    /// <summary>
    /// 删除节点
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="name">节点名称(嵌套节点名称:root/abcd/efgh)</param>
    public static void XmlRemoveElement(string path, string name)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(name) as XmlElement;

        xmlElement.ParentNode.RemoveChild(xmlElement);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 删除节点
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="name">节点名称(嵌套节点名称:root/abcd/efgh)</param>
    public static void XmlRemoveElement(XmlDocument xmlDocument, string name)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(name) as XmlElement;

        xmlElement.ParentNode.RemoveChild(xmlElement);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);

    }



    /// <summary>
    /// 删除属性
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="Nodename">节点名称</param>
    /// <param name="attributeName">删除属性名称</param>
    public static void XmlRemoveAttribute(string path, string Nodename, string attributeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(Nodename) as XmlElement;

        xmlElement.RemoveAttribute(attributeName);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 删除属性
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="Nodename">节点名称</param>
    /// <param name="attributeName">删除属性名称</param>
    public static void XmlRemoveAttribute(XmlDocument xmlDocument, string Nodename, string attributeName)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(Nodename) as XmlElement;

        xmlElement.RemoveAttribute(attributeName);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 删除属性
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="Nodename">节点名称</param>
    /// <param name="index">删除属性索引</param>
    public static void XmlRemoveAttribute(string path, string Nodename, int index)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(Nodename) as XmlElement;

        xmlElement.RemoveAttributeAt(index);

        xmlDocument.Save(path);

    }


    /// <summary>
    /// 删除属性
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="Nodename">节点名称</param>
    /// <param name="index">删除属性索引</param>
    public static void XmlRemoveAttribute(XmlDocument xmlDocument, string Nodename, int index)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(Nodename) as XmlElement;

        xmlElement.RemoveAttributeAt(index);

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);

    }



    /// <summary>
    /// 修改节点下属性名称
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="oldAttributeName">旧属性名称</param>
    /// <param name="newAttributeName">新属性名称</param>
    public static void XmlAmendAttribute(string path, string nodeName, string oldAttributeName, string newAttributeName)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {
            if (xmlElement.Attributes[i].Name == oldAttributeName)
            {
                string oldText = xmlElement.Attributes[i].Value;

                xmlElement.RemoveAttribute(oldAttributeName);

                xmlDocument.Save(path);

                AddXmlAttribute(path, nodeName, newAttributeName, oldText);

            }

        }


    }


    /// <summary>
    /// 修改节点下属性名称
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="oldAttributeName">旧属性名称</param>
    /// <param name="newAttributeName">新属性名称</param>
    public static void XmlAmendAttribute(XmlDocument xmlDocument, string nodeName, string oldAttributeName, string newAttributeName)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {
            if (xmlElement.Attributes[i].Name == oldAttributeName)
            {
                string oldText = xmlElement.Attributes[i].Value;

                xmlElement.RemoveAttribute(oldAttributeName);

                string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

                xmlDocument.Save(path);

                AddXmlAttribute(path, nodeName, newAttributeName, oldText);

            }

        }


    }


    /// <summary>
    /// 修改节点下属性值
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="attributeName">属性名称</param>
    /// <param name="attributeValue">属性值</param>
    public static void XmlAmendAttributeValue(string path, string nodeName, string attributeName, string attributeValue)
    {

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {
            if (xmlElement.Attributes[i].Name == attributeName)
            {
                xmlElement.Attributes[i].Value = attributeValue;

                xmlDocument.Save(path);

            }

        }


    }



    /// <summary>
    /// 修改节点下属性值
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="nodeName">节点名称</param>
    /// <param name="attributeName">属性名称</param>
    /// <param name="attributeValue">属性值</param>
    public static void XmlAmendAttributeValue(XmlDocument xmlDocument, string nodeName, string attributeName, string attributeValue)
    {

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        for (int i = 0; i < xmlElement.Attributes.Count; i++)
        {
            if (xmlElement.Attributes[i].Name == attributeName)
            {
                xmlElement.Attributes[i].Value = attributeValue;

                string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

                xmlDocument.Save(path);

            }

        }

    }



    /// <summary>
    /// 修改节点名称并保留属性
    /// </summary>
    /// <param name="path">路径</param>
    /// <param name="nodeName">旧节点名称</param>
    /// <param name="newNodeName">新节点名称</param>
    public static void XmlAmendElement(string path, string nodeName, string newNodeName)
    {

        var allAttribute = GetXmlAllAttribute(path, nodeName);

        XmlDocument xmlDocument = LoadXml(path);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        XmlNode parentXmlNode = xmlElement.ParentNode;

        parentXmlNode.RemoveChild(xmlElement);

        XmlElement newXmlElement = xmlDocument.CreateElement(newNodeName);

        parentXmlNode.AppendChild(newXmlElement);

        foreach (var item in allAttribute)
        {

            newXmlElement.SetAttribute(item.Key, item.Value);

        }

        xmlDocument.Save(path);


    }



    /// <summary>
    /// 修改节点名称并保留属性
    /// </summary>
    /// <param name="xmlDocument">xml对象</param>
    /// <param name="nodeName">旧节点名称</param>
    /// <param name="newNodeName">新节点名称</param>
    public static void XmlAmendElement(XmlDocument xmlDocument, string nodeName, string newNodeName)
    {

        var allAttribute = GetXmlAllAttribute(xmlDocument, nodeName);

        XmlElement xmlElement = xmlDocument.DocumentElement.SelectSingleNode(nodeName) as XmlElement;

        XmlNode parentXmlNode = xmlElement.ParentNode;

        parentXmlNode.RemoveChild(xmlElement);

        XmlElement newXmlElement = xmlDocument.CreateElement(newNodeName);

        parentXmlNode.AppendChild(newXmlElement);

        foreach (var item in allAttribute)
        {

            newXmlElement.SetAttribute(item.Key, item.Value);

        }

        string path = xmlDocument.BaseURI.Substring(8, xmlDocument.BaseURI.Length - 8);

        xmlDocument.Save(path);


    }

}

}

====

尊重原创,谢谢,在这里插入图片描述

文章链接:https://blog.csdn.net/qq_41025563/article/details/115183959?spm=1001.2014.3001.5501

有什么问题欢迎大家留言,共同探讨,共同学习,嘻嘻,谢谢!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值