AIMS/AutoUpdateTool/XmlOperator.cs
2022-08-23 21:12:59 +08:00

513 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
namespace AutoUpdateTool
{
public class XmlOperator
{
private XmlDocument _document = new XmlDocument();
private string _xmlPath;
private string _nodePath;
public string XmlPath
{
get
{
return this._xmlPath;
}
set
{
this._xmlPath = value;
}
}
public string NodePath
{
get
{
return this._nodePath;
}
set
{
this._nodePath = value;
}
}
public XmlOperator(string xmlPath, string nodePath)
{
this._xmlPath = xmlPath;
this._nodePath = nodePath;
this._document.Load(xmlPath);
}
public XmlOperator(string xmlPath)
{
this._xmlPath = xmlPath;
this._document.Load(xmlPath);
}
public string Out()
{
return this._document.OuterXml;
}
public List<string> GetNode(string nodeName)
{
List<string> result;
try
{
List<string> list = new List<string>();
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(nodeName);
foreach (XmlNode xmlNode in elementsByTagName)
{
list.Add(xmlNode.InnerText);
}
result = list;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public List<string> GetNode(string path, string nodeName)
{
List<string> result;
try
{
List<string> list = new List<string>();
XmlNodeList xmlNodeList = this._document.SelectNodes(path);
foreach (XmlNode xmlNode in xmlNodeList)
{
list.Add(xmlNode[nodeName].InnerText);
}
result = list;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public List<KeyValuePair<string, string>> GetNodePair(string path, string nodeName, string nodeName2)
{
List<KeyValuePair<string, string>> result;
try
{
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
XmlNodeList xmlNodeList = this._document.SelectNodes(path);
if (xmlNodeList != null)
{
foreach (XmlNode xmlNode in xmlNodeList)
{
XmlElement xmlElement = xmlNode[nodeName];
if (xmlElement != null)
{
XmlElement xmlElement2 = xmlNode[nodeName2];
if (xmlElement2 != null)
{
list.Add(new KeyValuePair<string, string>(xmlElement.InnerText, xmlElement2.InnerText));
}
}
}
}
result = list;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public string GetNode(int i, int j, string path)
{
string innerText;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(path);
innerText = xmlNodeList[i].ChildNodes[j].InnerText;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return innerText;
}
public string GetNode(int i, int j)
{
string innerText;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(this._nodePath);
innerText = xmlNodeList[i].ChildNodes[j].InnerText;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return innerText;
}
public string GetNode(int i, string nodePath, string nodeName)
{
string result;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(nodePath);
for (int j = 0; j <= xmlNodeList[i].ChildNodes.Count; j++)
{
if (xmlNodeList[i].ChildNodes[j].Name.Equals(nodeName))
{
result = xmlNodeList[i].ChildNodes[j].InnerText;
return result;
}
}
result = "nofind";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public string GetNode(string uncleName, string uncleValue, string nodePath, string parentName, string nodeName)
{
string result;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(nodePath);
for (int i = 0; i < xmlNodeList.Count; i++)
{
XmlElement xmlElement = (XmlElement)xmlNodeList[i];
if (xmlElement.GetElementsByTagName(uncleName)[0].InnerText.Equals(uncleValue))
{
result = (xmlElement.GetElementsByTagName(parentName)[0] as XmlElement).GetElementsByTagName(nodeName)[0].InnerText;
return result;
}
}
result = "";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public string GetNode(string siblingName, string siblingValue, string nodePath, string nodeName)
{
string result;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(nodePath);
for (int i = 0; i < xmlNodeList.Count; i++)
{
XmlElement xmlElement = (XmlElement)xmlNodeList[i];
string innerText = xmlElement.GetElementsByTagName(siblingName)[0].InnerText;
if (innerText.Equals(siblingValue))
{
result = xmlElement.GetElementsByTagName(nodeName)[0].InnerText;
return result;
}
}
result = "";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public string GetNode(int i, string nodeName)
{
string result;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(this._nodePath);
for (int j = 0; j <= xmlNodeList[i].ChildNodes.Count; j++)
{
if (xmlNodeList[i].ChildNodes[j].Name.Equals(nodeName))
{
result = xmlNodeList[i].ChildNodes[j].InnerText;
return result;
}
}
result = "nofind";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public int Count(string nodeName)
{
int count;
try
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(nodeName);
count = elementsByTagName.Count;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return count;
}
public int Count()
{
int count;
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(this._nodePath);
count = xmlNodeList.Count;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return count;
}
public int CountChilds(int i, string nodeName)
{
int result;
try
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(nodeName);
if (elementsByTagName.Count > 0)
{
result = elementsByTagName[i].ChildNodes.Count;
}
else
{
result = 0;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public int CountChilds(string nodeName)
{
int result;
try
{
int num = 0;
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(nodeName);
if (elementsByTagName.Count > 0)
{
for (int i = 0; i < elementsByTagName.Count; i++)
{
num += elementsByTagName[i].ChildNodes.Count;
}
result = num;
}
else
{
result = 0;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return result;
}
public int SetNode(string nodeName, string newValue)
{
int count;
try
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(nodeName);
foreach (XmlNode xmlNode in elementsByTagName)
{
xmlNode.InnerText = newValue;
}
this._document.Save(this._xmlPath);
count = elementsByTagName.Count;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return count;
}
public void SetNode(int i, string nodePath, string nodeName, string newValue)
{
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(nodePath);
if (xmlNodeList.Count <= 0 || xmlNodeList.Count <= i)
{
throw new Exception("并无此子集");
}
for (int j = 0; j < xmlNodeList.Item(i).ChildNodes.Count; j++)
{
if (xmlNodeList[i].ChildNodes[j].Name == nodeName)
{
xmlNodeList[i].ChildNodes[j].InnerText = newValue;
}
}
this._document.Save(this._xmlPath);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public void SetNode(int i, string nodeName, string newValue)
{
try
{
XmlNodeList xmlNodeList = this._document.SelectNodes(this._nodePath);
if (xmlNodeList.Count > 0 && xmlNodeList.Count > i)
{
for (int j = 0; j < xmlNodeList.Item(i).ChildNodes.Count; j++)
{
if (xmlNodeList.Item(i).ChildNodes.Item(j).Name == nodeName)
{
xmlNodeList.Item(i).ChildNodes.Item(j).InnerText = newValue;
}
}
this._document.Save(this._xmlPath);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public void InsetNode(string parentName, string nodeName, string nodeVale)
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(parentName);
for (int i = 0; i < elementsByTagName.Count; i++)
{
XmlElement xmlElement = this._document.CreateElement(nodeName);
elementsByTagName.Item(i).AppendChild(xmlElement);
xmlElement.InnerText = nodeVale;
}
this._document.Save(this._xmlPath);
}
public void InsetNode(int i, string parentName, string nodeName, string nodeValue)
{
try
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(parentName);
XmlElement xmlElement = this._document.CreateElement(nodeName);
if (elementsByTagName.Count <= 0)
{
throw new Exception("无此节点");
}
elementsByTagName[i - 1].AppendChild(xmlElement);
xmlElement.InnerText = nodeValue;
this._document.Save(this._xmlPath);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public void InsertRootNode(string rootName, string[] nodeName, string[] nodeValue)
{
XmlElement documentElement = this._document.DocumentElement;
XmlElement xmlElement = this._document.CreateElement(rootName);
documentElement.AppendChild(xmlElement);
for (int i = 0; i < nodeName.Length; i++)
{
XmlElement xmlElement2 = this._document.CreateElement(nodeName[i]);
xmlElement.AppendChild(xmlElement2);
xmlElement2.InnerText = nodeValue[i];
}
this._document.Save(this._xmlPath);
}
public void InsertNode(string nodePath, string parentName, string[] nodeName, string[] nodeValue)
{
XmlNodeList xmlNodeList = this._document.SelectNodes(nodePath);
XmlElement xmlElement = this._document.CreateElement(parentName);
xmlNodeList[0].AppendChild(xmlElement);
for (int i = 0; i < nodeName.Length; i++)
{
XmlElement xmlElement2 = this._document.CreateElement(nodeName[i]);
xmlElement2.InnerText = nodeValue[i];
xmlElement.AppendChild(xmlElement2);
}
this._document.Save(this._xmlPath);
}
public void DeleteNode(string parentName, string nodeName)
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(parentName);
foreach (XmlNode xmlNode in elementsByTagName)
{
foreach (XmlNode xmlNode2 in xmlNode.ChildNodes)
{
if (xmlNode2.Name == nodeName)
{
xmlNode.RemoveChild(xmlNode2);
}
}
}
this._document.Save(this._xmlPath);
}
public void DeleteNode(string parentName)
{
XmlNodeList elementsByTagName = this._document.GetElementsByTagName(parentName);
foreach (XmlNode xmlNode in elementsByTagName)
{
xmlNode.RemoveAll();
}
this._document.Save(this._xmlPath);
}
public void DeleteAll()
{
XmlElement documentElement = this._document.DocumentElement;
documentElement.RemoveAll();
this._document.Save(this._xmlPath);
}
public bool Save(string xmlName, string rootElement)
{
bool result;
try
{
string filename = Directory.GetCurrentDirectory() + "\\" + xmlName;
XmlDocument xmlDocument = new XmlDocument();
XmlElement newChild = xmlDocument.CreateElement(rootElement);
xmlDocument.AppendChild(newChild);
xmlDocument.Save(filename);
result = true;
}
catch (XmlException ex)
{
throw new Exception(ex.Message);
}
return result;
}
}
}