C#对XML文件的常用操作
在处理XML文件的时候会经常用到,包含了C#对XML文件的常用操作
[code=”langlanguage””]
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace CrazyCoder.Common.XML
{
///
/// by CrazyCoder.Cn
/// 转载请注明出处
///
public class XmlHandler
{
protected XmlDocument xdoc = new XmlDocument();
public XmlElement root;
public XmlHandler()
{
}
#region LoadXml
///
///
/// public void LoadXml(string xml)
{
xdoc.LoadXml(xml);
root = (XmlElement)xdoc.FirstChild;
}
#endregion
#region 取得名称为name的结点的值
///
///
/// ///
public string GetValue(string name)
{
XmlNode xn = FindXnByName(root.ChildNodes, name);
if (xn == null) return null;
return xn.InnerText;
}
#endregion
#region 创建一个包含version和指定根节点的XmlDocument
///
///
/// public void CreateRoot(string rootName)
{
XmlElement xe = xdoc.CreateElement(rootName);
xdoc.AppendChild(xe);
root = xe;
}
#endregion
#region 增加一个子结点
///
///
/// /// ///
public XmlElement AppendChild(string name, string _value)
{
return AddChild((XmlElement)root, name, _value);
}
#endregion
#region ToString
public override string ToString()
{
return xdoc.OuterXml;
}
#endregion
#region 为一个XmlElement添加子节点,并返回添加的子节点引用
///
///
/// /// /// ///
public XmlElement AddChild(XmlElement xe, string sField, string sValue)
{
XmlElement xeTemp = xdoc.CreateElement(sField);
xeTemp.InnerText = sValue;
xe.AppendChild(xeTemp);
return xeTemp;
}
#endregion
#region 为一个XmlElement添加子节点,并返回添加的子节点引用
///
///
/// /// /// ///
protected XmlElement AddChild(XmlElement xe, XmlDocument xd, string sField)
{
XmlElement xeTemp = xd.CreateElement(sField);
xe.AppendChild(xeTemp);
return xeTemp;
}
#endregion
#region 为一个节点添加属性
///
///
/// /// /// public void AddAttribute(XmlElement xe, string strName, string strValue)
{
//判断属性是否存在
string s = GetXaValue(xe.Attributes, strName);
//属性已经存在
if (s != null)
{
throw new System.Exception(“attribute exists”);
}
XmlAttribute xa = xdoc.CreateAttribute(strName);
xa.Value = strValue;
xe.Attributes.Append(xa);
}
#endregion
#region 为一个节点添加属性,不是系统表
///
///
/// /// /// /// protected void AddAttribute(XmlDocument xdoc, XmlElement xe, string strName, string strValue)
{
//判断属性是否存在
string s = GetXaValue(xe.Attributes, strName);
//属性已经存在
if (s != null)
{
throw new Exception(“Error:The attribute \'” + strName + “\’ has been existed!”);
}
XmlAttribute xa = xdoc.CreateAttribute(strName);
xa.Value = strValue;
xe.Attributes.Append(xa);
}
#endregion
#region 通过节点名称找到指定的节点
///
///
/// /// ///
protected XmlNode FindXnByName(XmlNodeList xnl, string strName)
{
for (int i = 0; i < xnl.Count; i++)
{
if (xnl.Item(i).LocalName == strName) return xnl.Item(i);
}
return null;
}
#endregion
#region 找到指定名称属性的值
///
///
/// /// ///
protected string GetXaValue(XmlAttributeCollection xac, string strName)
{
for (int i = 0; i < xac.Count; i++)
{
if (xac.Item(i).LocalName == strName) return xac.Item(i).Value;
}
return null;
}
#endregion
#region 找到指定名称属性的值
///
///
/// /// ///
protected string GetXnValue(XmlNodeList xnl, string strName)
{
for (int i = 0; i < xnl.Count; i++)
{
if (xnl.Item(i).LocalName == strName) return xnl.Item(i).InnerText;
}
return null;
}
#endregion
#region 为一个节点指定值
///
///
/// /// /// protected void SetXnValue(XmlNodeList xnl, string strName, string strValue)
{
for (int i = 0; i < xnl.Count; i++)
{
if (xnl.Item(i).LocalName == strName)
{
xnl.Item(i).InnerText = strValue;
return;
}
}
return;
}
#endregion
#region 为一个属性指定值
///
///
/// /// /// protected void SetXaValue(XmlAttributeCollection xac, string strName, string strValue)
{
for (int i = 0; i < xac.Count; i++)
{
if (xac.Item(i).LocalName == strName)
{
xac.Item(i).Value = strValue;
return;
}
}
return;
}
#endregion
#region 寻找具有指定名称和属性/值组合的节点
///
///
/// /// /// ///
protected XmlNode FindXnByXa(XmlNodeList xnl, string strXaName, string strXaValue)
{
string xa;
for (int i = 0; i < xnl.Count; i++)
{
xa = GetXaValue(xnl.Item(i).Attributes, strXaName);
if (xa != null)
{
if (xa == strXaValue) return xnl.Item(i);
}
}
return null;
}
#endregion
}
}
[/code]