using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
public class XmlDoc
{
XmlDocument doc;
string xmlFileName;
readonly string xmlRootName;
public XmlNode xmlRoot;
//设置XML文件名
public string FileName
{
set { xmlFileName = HttpContext.Current.Server.MapPath(value); }
}
/// <summary>
/// 类初始化
/// </summary>
/// <param name='path'>文件夹</param>
/// <param name='filename'>xml文件名</param>
/// <param name='root'>xml根节点</param>
public XmlDoc(string path, string filename, string root)
{
xmlRootName = root;
xmlFileName = HttpContext.Current.Server.MapPath(path) + "\\" + filename;
doc = new XmlDocument();
try
{
doc.Load(xmlFileName);
}
catch
{
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><" + root + "></" + root + ">");
}
xmlRoot = doc.SelectSingleNode(xmlRootName);
}
/// <summary>
/// 类初始化(从内容实例化XML)
/// </summary>
/// <param name='Content'>内容</param>
/// <param name='root'>xml根节点</param>
public XmlDoc(string Content, string root)
{
xmlRootName = root;
doc = new XmlDocument();
try
{
doc.LoadXml(Content);
}
catch
{
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><" + xmlRootName + "></" + xmlRootName + ">");
}
xmlRoot = doc.SelectSingleNode(xmlRootName);
xmlFileName = HttpContext.Current.Server.MapPath(root + ".xml");
}
/// <summary>
/// 保存XML文件
/// </summary>
/// <returns></returns>
public void Save()
{
try
{
string server_path = Helper.GetServerPath(xmlFileName);
if (!Directory.Exists(server_path))
{
Directory.CreateDirectory(server_path);
}
doc.Save(xmlFileName);
}
catch
{
return;
}
}
/// <summary>
/// 删除XML文件
/// </summary>
/// <returns></returns>
public void Delete()
{
try
{
if (File.Exists(xmlFileName))
{
File.Delete(xmlFileName);
}
}
catch
{
return;
}
}
/// <summary>
/// 获取类里的XmlDocument
/// </summary>
/// <returns></returns>
public XmlDocument Doc
{
get { return doc; }
}
/// <summary>
/// 对类里的XmlDocument重新初始化
/// </summary>
/// <returns></returns>
public void DocInit()
{
doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><" + xmlRoot + "></" + xmlRoot + ">");
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <param name='IsAutoCreate'>是否自动创建</param>
/// <returns>XmlElement</returns>
public XmlElement GetXmlNodeByTagNameAndIndex(XmlElement parentNode, string tagName, int index, bool IsAutoCreate)
{
XmlElement xe;
if (index < 0)
{
return null;
}
try
{
XmlNodeList elemList = parentNode.SelectNodes(tagName);
//自动创建
if (elemList.Count <= index && IsAutoCreate)
{
for (int i = elemList.Count; i <= index; i++)
{
parentNode.AppendChild(doc.CreateElement(tagName));
}
elemList = parentNode.SelectNodes(tagName);
}
XmlNode xn = elemList[index];
xe = (XmlElement)xn;
}
catch
{
xe = null;
}
return xe;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement(根据节点属性值查找)
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <param name='AttributeName'>节点属性名称</param>
/// <param name='AttributeValue'>节点属性值</param>
/// <param name='IsAutoCreate'>是否自动创建</param>
/// <returns>XmlElement</returns>
public XmlElement GetXmlNodeByTagNameAndAttribute(XmlElement parentNode, string tagName, string AttributeName, string AttributeValue, bool IsAutoCreate)
{
bool IsExists = false;
XmlElement xe = null;
string Value = "";
try
{
XmlNodeList elemList = parentNode.SelectNodes(tagName);
if (elemList != null)
{
foreach (XmlNode xn in elemList)
{
if (xn.NodeType == XmlNodeType.Element)
{
XmlElement xel = (XmlElement)xn;
if (xel.HasAttribute(AttributeName))
{
Value = xel.GetAttribute(AttributeName);
}
if (Value == AttributeValue)
{
IsExists = true;
xe = xel;
break;
}
}
}
}
//自动创建
if (!IsExists && IsAutoCreate)
{
XmlElement elem = doc.CreateElement(tagName);
elem.SetAttribute(AttributeName, AttributeValue);
parentNode.AppendChild(elem);
xe = elem;
}
}
catch
{
xe = null;
}
return xe;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement(根节点作父节点)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <param name='IsAutoCreate'>是否自动创建</param>
/// <returns>XmlElement</returns>
public XmlElement GetXmlNodeByTagNameAndIndex(string tagName, int index, bool IsAutoCreate)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetXmlNodeByTagNameAndIndex(ParentNode, tagName, index, IsAutoCreate);
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement(根节点作父节点,根据节点属性值查找)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <param name='AttributeName'>节点属性名称</param>
/// <param name='AttributeValue'>节点属性值</param>
/// <param name='IsAutoCreate'>是否自动创建</param>
/// <returns>XmlElement</returns>
public XmlElement GetXmlNodeByTagNameAndAttribute(string tagName, string AttributeName, string AttributeValue, bool IsAutoCreate)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetXmlNodeByTagNameAndAttribute(ParentNode, tagName, AttributeName, AttributeValue, IsAutoCreate);
}
/// <summary>
/// 为类里的XmlDocument一个特定XmlElement设置子CData节点
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <param name='tagValue'>子节点内容</param>
/// <returns></returns>
public void SetXmlCDataNode(XmlElement xe, string tagName, string tagValue)
{
XmlNode elemList = xe.SelectSingleNode(tagName);
if (elemList != null)
{
if (elemList.FirstChild == null)
{
XmlNode elem = elemList.AppendChild(doc.CreateCDataSection(tagValue));
elemList.AppendChild(elem);
}
else
{
elemList.FirstChild.Value = tagValue;
}
}
else
{
XmlElement elem = doc.CreateElement(tagName);
XmlNode xn = elem.AppendChild(doc.CreateCDataSection(tagValue));
elem.AppendChild(xn);
xe.AppendChild(elem);
}
}
/// <summary>
/// 为类里的XmlDocument一个特定XmlElement设置子CData节点(根节点作节点)
/// </summary>
/// <param name='tagName'>子节点名称</param>
/// <param name='tagValue'>子节点内容</param>
/// <returns></returns>
public void SetXmlCDataNode(string tagName, string tagValue)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
SetXmlCDataNode(ParentNode, tagName, tagValue);
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子CData节点内容
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <returns>string</returns>
public string GetXmlCData(XmlElement xe, string tagName)
{
string tagValue = "";
XmlNode elemList = xe.SelectSingleNode(tagName);
if (elemList != null)
{
if (elemList.FirstChild != null)
{
tagValue = elemList.FirstChild.Value;
}
}
return tagValue;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子CData节点内容(根节点作节点)
/// </summary>
/// <param name='tagName'>子节点名称</param>
/// <returns>string</returns>
public string GetXmlCData(string tagName)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetXmlCData(ParentNode, tagName);
}
/// <summary>
/// 为类里的XmlDocument一个特定XmlElement设置属性
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>节点属性名称</param>
/// <param name='tagValue'>节点属性值</param>
/// <returns></returns>
public void SetXmlAttribute(XmlElement xe, string tagName, string tagValue)
{
if (xe.HasAttribute(tagName))
{
xe.SetAttribute(tagName, tagValue);
}
else
{
xe.SetAttribute(tagName, tagValue);
}
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的属性值
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>节点属性名称</param>
/// <returns>string</returns>
public string GetXmlAttribute(XmlElement xe, string tagName)
{
string tagValue = "";
if (xe.HasAttribute(tagName))
{
tagValue = xe.GetAttribute(tagName);
}
return tagValue;
}
/// <summary>
/// 移除类里的XmlDocument一个特定XmlElement的属性值
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>节点属性名称</param>
/// <returns></returns>
public void RemoveXmlAttribute(XmlElement xe, string tagName)
{
if (xe.HasAttribute(tagName))
{
xe.RemoveAttribute(tagName);
}
}
/// <summary>
/// 移除类里的XmlDocument一个特定XmlElement的子节点
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <returns></returns>
public void RemoveXmlChildNode(XmlElement xe, string tagName)
{
XmlNode removeNode = xe.SelectSingleNode(tagName);
if (removeNode != null)
{
xe.RemoveChild(removeNode);
}
}
/// <summary>
/// 移除类里的XmlDocument一个特定XmlElement(根节点不能移除)
/// </summary>
/// <param name='xe'>节点</param>
/// <returns></returns>
public void RemoveXmlNode(XmlElement xe)
{
if (xe.ParentNode != null)
{
xe.ParentNode.RemoveChild(xe);
}
}
/// <summary>
/// 上移类里的XmlDocument一个特定XmlElement
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns></returns>
public void Up(XmlElement parentNode, string tagName, int index)
{
XmlNodeList elemList = parentNode.SelectNodes(tagName);
if (elemList != null)
{
if ((elemList.Count) > index && (index > 0))
{
XmlNode refChild = elemList[index];
XmlNode xn = elemList[index - 1];
RemoveXmlNode((XmlElement)xn);
parentNode.InsertAfter(xn, refChild);
}
}
}
/// <summary>
/// 上移类里的XmlDocument一个特定XmlElement(根节点作父节点)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns></returns>
public void Up(string tagName, int index)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
Up(ParentNode, tagName, index);
}
/// <summary>
/// 下移类里的XmlDocument一个特定XmlElement
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns></returns>
public void Down(XmlElement parentNode, string tagName, int index)
{
XmlNodeList elemList = parentNode.SelectNodes(tagName);
if (elemList != null)
{
if ((elemList.Count - 1) > index && (index >= 0))
{
XmlNode refChild = elemList[index];
XmlNode xn = elemList[index + 1];
RemoveXmlNode((XmlElement)xn);
parentNode.InsertBefore(xn, refChild);
}
}
}
/// <summary>
/// 下移类里的XmlDocument一个特定XmlElement(根节点作父节点)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns></returns>
public void Down(string tagName, int index)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
Down(ParentNode, tagName, index);
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement下的所有相同节点名的节点数量
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <returns>int</returns>
public int GetNodeCount(XmlElement parentNode, string tagName)
{
int NodeCount = 0;
XmlNodeList elemList = parentNode.SelectNodes(tagName);
if (elemList != null)
{
NodeCount = elemList.Count;
}
return NodeCount;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement下的所有相同节点名的节点数量(根节点作父节点)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <returns>int</returns>
public int GetNodeCount(string tagName)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetNodeCount(ParentNode, tagName);
}
/// <summary>
/// 为类里的XmlDocument一个特定XmlElement设置子Text节点
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <param name='tagValue'>子节点内容</param>
/// <returns></returns>
public void SetXmlTextNode(XmlElement xe, string tagName, string tagValue)
{
XmlNode elemList = xe.SelectSingleNode(tagName);
if (elemList != null)
{
if (elemList.FirstChild == null)
{
XmlNode elem = elemList.AppendChild(doc.CreateTextNode(tagValue));
elemList.AppendChild(elem);
}
else
{
elemList.FirstChild.Value = tagValue;
}
}
else
{
XmlElement elem = doc.CreateElement(tagName);
XmlNode xn = elem.AppendChild(doc.CreateTextNode(tagValue));
elem.AppendChild(xn);
xe.AppendChild(elem);
}
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子Text节点内容
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <returns>string</returns>
public string GetXmlTextNode(XmlElement xe, string tagName)
{
string tagValue = "";
XmlNode elemList = xe.SelectSingleNode(tagName);
if (elemList != null)
{
if (elemList.FirstChild != null)
{
tagValue = elemList.FirstChild.Value;
}
}
return tagValue;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子Text节点内容
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>子节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns>string</returns>
public string GetXmlText(XmlElement xe, string tagName, int index)
{
string tagValue = "";
XmlNodeList elemList = xe.SelectNodes(tagName);
if (elemList != null)
{
if ((elemList.Count) > index)
{
XmlNode refChild = elemList[index];
if (refChild.FirstChild != null)
{
tagValue = refChild.FirstChild.Value;
}
}
}
return tagValue;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子Text节点内容(根节点作节点)
/// </summary>
/// <param name='tagName'>子节点名称</param>
/// <param name='index'>节点数组下标值</param>
/// <returns>string</returns>
public string GetXmlText(string tagName, int index)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetXmlText(ParentNode, tagName, index);
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的子Text节点内容(根节点作节点)
/// </summary>
/// <param name='tagName'>子节点名称</param>
/// <returns>string</returns>
public string GetXmlTextNode(string tagName)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetXmlTextNode(ParentNode, tagName);
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的所有有特定属性的节点的属性的最大值(属性值必须是INT型)
/// </summary>
/// <param name='parentNode'>父节点</param>
/// <param name='tagName'>节点名称</param>
/// <param name='AttributeName'>节点属性名称</param>
/// <returns>int</returns>
public int GetMaxValueByTagNameAndAttribute(XmlElement parentNode, string tagName, string AttributeName)
{
int MaxTagValue = 1;
XmlNodeList elemList = parentNode.SelectNodes(tagName);
if (elemList != null)
{
foreach (XmlNode xn in elemList)
{
if (xn.NodeType == XmlNodeType.Element)
{
XmlElement xel = (XmlElement)xn;
if (xel.HasAttribute(AttributeName))
{
int iValue = FormChecker.IsNumeric(xel.GetAttribute(AttributeName), 0);
if (iValue >= MaxTagValue)
{
MaxTagValue = iValue + 1;
}
}
}
}
}
return MaxTagValue;
}
/// <summary>
/// 获取类里的XmlDocument一个特定XmlElement的所有有特定属性的节点的属性的最大值(属性值必须是INT型,根节点作节点)
/// </summary>
/// <param name='tagName'>节点名称</param>
/// <param name='AttributeName'>节点属性名称</param>
/// <returns>int</returns>
public int GetMaxValueByTagNameAndAttribute(string tagName, string AttributeName)
{
XmlElement ParentNode = (XmlElement)xmlRoot;
return GetMaxValueByTagNameAndAttribute(ParentNode, tagName, AttributeName);
}
/// <summary>
/// 判断类里的XmlDocument一个特定XmlElement是否存在特定节点
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>节点名称</param>
/// <returns>int</returns>
public bool HasAttribute(XmlElement xe, string tagName)
{
return xe.HasAttribute(tagName);
}
/// <summary>
/// 获取特定XmlElement的节点值
/// </summary>
/// <param name='xe'>节点</param>
/// <param name='tagName'>节点名称</param>
/// <returns>string</returns>
public string GetXmlCDataNode(XmlElement xe, string tagName)
{
string tagValue = "";
XmlNode elemList = xe.SelectSingleNode(tagName);
if (elemList != null)
{
if (elemList.FirstChild != null)
{
tagValue = elemList.FirstChild.Value;
}
}
return tagValue;
}
/// <summary>
/// 获取根节点下特定XmlElement的节点值
/// </summary>
/// <param name='itemName'>节点名</param>
/// <param name='tagName'>节点属性名称</param>
/// <param name='tagValue'>节点属性值</param>
/// <returns>string</returns>
public string GetXmlTextNodeByAttribute(string itemName, string tagName, string tagValue)
{
string value = "";
XmlElement xe = GetXmlNodeByTagNameAndAttribute(itemName, tagName, tagValue, false);
if (xe != null)
{
value = GetXmlCDataNode(xe, "value");
}
if (value == "")
{
value = tagValue;
}
return value;
}
}
转载于:https://www.cnblogs.com/wlwjc/articles/wally.html