哈喽,来到新公司,下午没什么事,先写个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
有什么问题欢迎大家留言,共同探讨,共同学习,嘻嘻,谢谢!!!!!