更新整理
This commit is contained in:
426
ShrlAlgoToolkit.Core/Assists/XmlAssist.cs
Normal file
426
ShrlAlgoToolkit.Core/Assists/XmlAssist.cs
Normal file
@@ -0,0 +1,426 @@
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace ShrlAlgoToolkit.Core.Assists;
|
||||
|
||||
public class XmlAssist
|
||||
{
|
||||
public XmlAssist(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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user