Files
Shrlalgo.RvKits/Sai.Toolkit.Core/Heplers/XmlHelper.cs
2024-10-08 16:21:39 +08:00

427 lines
9.2 KiB
C#

using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace Sai.Toolkit.Core.Helpers;
public class XmlHelper
{
public XmlHelper(string strPath)
{
XmlPath = strPath;
}
public string XmlPath { get; }
/// <summary>
/// 创建配置文件,可在子类中重写此方法
/// </summary>
public static void CreateFile(string fileName)
{
var doc = new XmlDocument();
var dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(dec);
var root = doc.CreateElement("Root");
doc.AppendChild(root);
root.AppendChild(doc.CreateElement("Config"));
doc.Save(fileName);
}
/// <summary>
/// 删除节点值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
public static void Delete(string path, string node)
{
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
xn.ParentNode.RemoveChild(xn);
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
/// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
public static void Delete(string path, string node, string attribute)
{
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
var xe = (XmlElement)xn;
if (attribute.Equals(string.Empty))
{
xn.ParentNode.RemoveChild(xn);
}
else
{
xe.RemoveAttribute(attribute);
}
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
/// <summary>
/// 插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
/// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
/// <param name="value">值</param>
public static void Insert(string path, string node, string element, string attribute, string value)
{
try
{
var doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + path);
var xn = doc.SelectSingleNode(node);
if (element.Equals(string.Empty))
{
if (!attribute.Equals(string.Empty))
{
var xe = (XmlElement)xn;
xe.SetAttribute(attribute, value);
}
}
else
{
var xe = doc.CreateElement(element);
if (attribute.Equals(string.Empty))
{
xe.InnerText = value;
}
else
{
xe.SetAttribute(attribute, value);
}
xn.AppendChild(xe);
}
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
/// <summary>
/// 插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
/// <param name="strList">由XML属性名和值组成的二维数组</param>
public static void Insert(string path, string node, string element, string[][] strList)
{
try
{
var doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + path);
var xn = doc.SelectSingleNode(node);
var xe = doc.CreateElement(element);
var strAttribute = string.Empty;
var strValue = string.Empty;
for (var i = 0; i < strList.Length; i++)
{
for (var j = 0; j < strList[i].Length; j++)
{
if (j == 0)
{
strAttribute = strList[i][j];
}
else
{
strValue = strList[i][j];
}
}
if (strAttribute.Equals(string.Empty))
{
xe.InnerText = strValue;
}
else
{
xe.SetAttribute(strAttribute, strValue);
}
}
xn.AppendChild(xe);
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
public static void parsexmldoc(string file)
{
var document = XDocument.Load(file);
//获取到XML的根元素进行操作
var root = document.Root;
if (root.FirstAttribute.Value == "车辆轮廓点")
{
//获取根元素下的所有子元素
var enumerable = root.Elements();
foreach (var xe in enumerable)
{
//IEnumerable<XElement> pts = xe.Elements();
//KineModel data = new KineModel();
//data.StrPosition = xe.Name.LocalName;
//data.Name = (string)xe.Attribute("点号");
//data.X = (double)xe.Attribute("X");
//data.Y = (double)xe.Attribute("Y");
//vm.Items.Add(data);
}
}
}
/// <summary>
/// 读取指定节点的数据
/// </summary>
/// <param name="node">节点</param>
/// <returns>The <see cref="string" /></returns>
public string Read(string node)
{
var value = string.Empty;
try
{
var doc = XmlLoad();
var xn = doc.SelectSingleNode(node);
if (xn != null)
{
value = xn.InnerText;
}
}
catch
{
// ignored
}
return value;
}
/// <summary>
/// 读取指定路径和节点的串联值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <returns>The <see cref="string" /></returns>
public static string Read(string path, string node)
{
var value = string.Empty;
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
value = xn.InnerText;
}
catch
{
// ignored
}
return value;
}
/// <summary>
/// 读取指定路径和节点的属性值
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
/// <returns>The <see cref="string" /></returns>
public static string Read(string path, string node, string attribute)
{
var value = string.Empty;
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
value = attribute.Equals(string.Empty) ? xn.InnerText : xn.Attributes[attribute].Value;
}
catch
{
// ignored
}
return value;
}
/// <summary>
/// 获取某一节点的所有子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
/// <returns>The <see cref="XmlNodeList" /></returns>
public XmlNodeList ReadAllChild(string node)
{
var doc = XmlLoad();
var xn = doc.SelectSingleNode(node);
var nodelist = xn.ChildNodes; //得到该节点的子节点
return nodelist;
}
/// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
public string[] ReadAllChildallValue(string node)
{
var i = 0;
string[] str = { };
var doc = XmlLoad();
var xn = doc.SelectSingleNode(node);
if (xn != null)
{
var nodelist = xn.ChildNodes; //得到该节点的子节点
if (nodelist.Count > 0)
{
str = new string[nodelist.Count];
foreach (XmlElement el in nodelist) //读元素值
{
str[i] = el.Value;
i++;
}
}
}
return str;
}
/// <summary>
/// 修改指定节点的数据
/// </summary>
/// <param name="node">节点</param>
/// <param name="value">值</param>
public void Update(string node, string value)
{
try
{
var doc = XmlLoad();
var xn = doc.SelectSingleNode(node);
xn.InnerText = value;
doc.Save(AppDomain.CurrentDomain.BaseDirectory + XmlPath);
}
catch
{
// ignored
}
}
/// <summary>
/// 修改指定节点的数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="value">值</param>
public static void Update(string path, string node, string value)
{
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
xn.InnerText = value;
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
/// <summary>
/// 修改指定节点的属性值(静态)
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
/// <param name="value">值</param>
public static void Update(string path, string node, string attribute, string value)
{
try
{
var doc = XmlLoad(path);
var xn = doc.SelectSingleNode(node);
var xe = (XmlElement)xn;
if (attribute.Equals(string.Empty))
{
xe.InnerText = value;
}
else
{
xe.SetAttribute(attribute, value);
}
doc.Save(AppDomain.CurrentDomain.BaseDirectory + path);
}
catch
{
// ignored
}
}
private XmlDocument XmlLoad()
{
var XMLFile = XmlPath;
var xmldoc = new XmlDocument();
try
{
var filename = AppDomain.CurrentDomain.BaseDirectory + XMLFile;
if (File.Exists(filename))
{
xmldoc.Load(filename);
}
}
catch (Exception)
{
// ignored
}
return xmldoc;
}
/// <summary>
/// 导入XML文件
/// </summary>
/// <param name="strPath">The strPath<see cref="string" /></param>
/// <returns>The <see cref="XmlDocument" /></returns>
private static XmlDocument XmlLoad(string strPath)
{
var xmldoc = new XmlDocument();
try
{
var filename = AppDomain.CurrentDomain.BaseDirectory + strPath;
if (File.Exists(filename))
{
xmldoc.Load(filename);
}
}
catch (Exception)
{
// ignored
}
return xmldoc;
}
}