这篇文章主要介绍了C#实现的可扩展标记语言操作类,包含C#针对可扩展标记语言的创建、删除、遍历、插入等常见操作,需要的朋友可以参考下
本文实例讲述了C#实现的可扩展标记语言操作类,分享给大家供大家参考,具体如下:
使用系统;
使用系统。数据;
使用系统。配置;
使用系统网页。
使用系统。网络安全;
使用系统Web . com。用户界面
使用系统Web . com。UI。web控件
使用系统web . com。ui。web控件。web部件;
使用系统Web . com。UI。html控件
使用系统。木卫一;
使用系统. Xml
使用系统。文本;
命名空间肌肉
{
///摘要
///XML操作基类
////摘要
公共类XmlHelper : IDisposable
{
//以下为单一功能的静态类
#地区读取可扩展标记语言到资料组
/**//**************************************************
* 函数名称:GetXml(字符串XmlPath)
* 功能说明:读取可扩展标记语言到资料组
* 参数:XmlPath:xml文档路径
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDnsConfig/dnsconfig。XML’);//获取可扩展标记语言路径
*数据集ds=EC .XML对象。获取XML(XML路径);//读取可扩展标记语言到资料组中
************************************************/
/**////摘要
///功能:读取可扩展标记语言到资料组中
////摘要
///param name='XmlPath'xml路径/param
///returnsDataSet/returns
公共静态数据集GetXml(字符串XmlPath)
{
数据集ds=新数据集();
ds .读取XML(@ XML path);
返回ds;
}
#结束区域
#地区读取可扩展标记语言文档并返回一个节点
/**//**************************************************
* 函数名称:ReadXmlReturnNode(字符串XmlPath,字符串节点)
* 功能说明:读取可扩展标记语言文档并返回一个节点:适用于一级节点
* 参数:XmlPath:xml文档路径;结节返回的节点名称
* 适应用Xml:可扩展标记语言版本='1.0 '编码='utf-8 '?
*根
* dns1ns1.everdns.com/dns1
* /root
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDnsConfig/dnsconfig。XML’);//获取可扩展标记语言路径
*回应。写(XmlObject .ReadXmlReturnNode(xmlPath,“邮件管理器”);
************************************************/
/**////摘要
///读取可扩展标记语言文档并返回一个节点:适用于一级节点
////摘要
///param name='XmlPath'xml路径/param
///param name='NodeName '节点/param
///返回/返回
公共静态字符串ReadXmlReturnNode(字符串XmlPath,字符串节点)
{
XML文档doc XML=new XML document();
docXml .load(@ XML path);
XmlNodeList xn=docXml .GetElementsByTagName(节点);
返回xn .项目(0)。内部文本。tostring();
}
#结束区域
#地区查找数据,返回一个资料组
/**//**************************************************
* 函数名称:GetXmlData(字符串xmlPath,字符串XmlPathNode)
* 功能说明:查找数据,返回当前节点的所有下级节点,填充到一个资料组中
* 参数:xmlPath:xml文档路径;XmlPathNode:当前节点的路径
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
*数据集ds=新数据集();
* ds=XmlObject .GetXmlData(xmlPath,' root/items ');//读取当前路径
*这个GridView1。数据源=ds
*这个GridView 1。DataBind();
* ds .clear();
* ds .dispose();
* Xml示例:
* ?可扩展标记语言版本='1.0 '编码='utf-8 '?
*根
*项目名称='xinnet '
* urlhttp://www.paycenter.com.cn/cgi-bin//url
*端口80/端口
*/项目
* /root
************************************************/
/**////摘要
///查找数据,返回当前节点的所有下级节点,填充到一个资料组中
////摘要
///param name='xmlPath'xml文档路径/param
///param name='XmlPathNode '节点的路径:根节点/父节点/当前节点/param
///返回/返回
公共静态数据集GetXmlData(字符串xmlPath,字符串XmlPathNode)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
数据集ds=新数据集();
字符串读取器read=新的字符串读取器(objXmlDoc .SelectSingleNode(XmlPathNode).外部XML);
ds .ReadXml(读取);
返回ds;
}
#结束区域
#地区更新可扩展标记语言节点内容
/**//**************************************************
* 函数名称:XmlNodeReplace(字符串xmlPath,字符串节点,字符串内容)
* 功能说明:更新可扩展标记语言节点内容
* 参数:xmlPath:xml文档路径;节点:当前节点的路径;内容:内容
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
* XmlObject .XmlNodeReplace(xmlPath,' root/test ',' 56789 ');//更新节点内容
************************************************/
/**////摘要
///更新可扩展标记语言节点内容
////摘要
///param name='xmlPath'xml路径/param
///param name='Node '要更换内容的节点:节点路径根节点/父节点/当前节点/param
///param name='Content '新的内容/param
公共静态void XmlNodeReplace(字符串xmlPath,字符串节点,字符串内容)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
objXmlDoc .选择单一节点(节点)。InnerText=内容;
objXmlDoc .保存(XML路径);
}
#结束区域
#地区删除可扩展标记语言节点和此节点下的子节点
/**//**************************************************
* 函数名称:XmlNodeDelete(字符串xmlPath,字符串节点)
* 功能说明:删除可扩展标记语言节点和此节点下的子节点
* 参数:xmlPath:xml文档路径;节点:当前节点的路径;
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
* XmlObject .XmlNodeDelete(xmlPath,' root/test ');//删除当前节点
************************************************/
/**////摘要
///删除可扩展标记语言节点和此节点下的子节点
////摘要
///param name='xmlPath'xml文档路径/param
///param name='Node '节点路径/param
公共静态void xmlnode删除(字符串XML路径,字符串节点)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
字符串主节点=节点.子串(0,节点LastIndexOf('/');
objXmlDoc .选择单一节点(主节点)。RemoveChild(objXmlDoc .SelectSingleNode(Node));
objXmlDoc .保存(XML路径);
}
#结束区域
#地区插入一个节点和此节点的子节点
/**//**************************************************
* 函数名称:XmlInsertNode(字符串xmlPath,字符串邮件节点,字符串子节点,字符串元素,字符串内容)
* 功能说明:插入一个节点和此节点的字节点
* 参数:xmlPath:xml文档路径;邮件节点:当前节点的路径;子节点:新插入的节点;元素:插入节点的子节点;内容:子节点的内容
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
* XmlObject .XmlInsertNode(xmlPath,' root/test ',' test1 ',' test2 ','测试内容');//插入一个节点和此节点的字节点
* 生成的可扩展标记语言格式为
*测试
*测试一
*测试2测试内容/test2
*/测试一
*/测试
************************************************/
/**////摘要
///插入一个节点和此节点的子节点
////摘要
///param name='xmlPath'xml路径/param
///param name='MailNode '当前节点路径/param
///param name='ChildNode '新插入节点/param
///param name='Element '插入节点的子节点/param
///param name='Content '子节点的内容,已经应用CDATA/param
公共静态void XmlInsertNode(字符串xmlPath、字符串邮件节点,字符串子节点,字符串元素、字符串内容)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
XmlNode objRootNode=objXmlDoc .SelectSingleNode(MailNode);
XML元素objChildNode=objXmlDoc .CreateElement(子节点);
objRootNode .AppendChild(objChildNode);
XmlElement objElement=objXmlDoc .创建元素(元素);
XmlCDataSection xcds=objXmlDoc .CreateCDataSection(内容);
对象元素AppendChild(xcds);
objChildNode .AppendChild(obj元素);
objXmlDoc .保存(XML路径);
}
#结束区域
#地区插入一节点,带一属性
/**//**************************************************
* 函数名称:XmlInsertElement(字符串xmlPath,字符串主节点,字符串元素,字符串属性,字符串属性内容,字符串内容)
* 功能说明:插入一节点,带一属性
* 参数:xmlPath:xml文档路径;邮件节点:当前节点的路径;元素:新插入的节点;属性:属性名称;属性内容:属性值;内容:节点的内容
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
* XmlObject .XmlInsertElement(xmlPath,' root/test ',' test1 ',' Attrib ','属性值', '节点内容');//插入一节点,带一属性
* 生成的可扩展标记语言格式为
*测试
* test1 Attrib='属性值'节点内容/test1
*/测试
************************************************/
/**////摘要
///插入一节点,带一属性
////摘要
///param name='xmlPath'Xml文档路径/param
///param name='MainNode '当前节点路径/param
///param name='Element '新节点/param
///param name='Attrib '属性名称/param
///param name='AttribContent '属性值/param
///param name='Content '新节点值/param
公共静态void XmlInsertElement(字符串xmlPath,字符串主节点,字符串元素,字符串属性,字符串属性内容,字符串内容)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
XmlNode objNode=objXmlDoc .选择单一节点(主节点);
XmlElement objElement=objXmlDoc .创建元素(元素);
对象元素SetAttribute(Attrib,Attrib内容);
对象元素InnerText=内容;
目标.AppendChild(obj元素);
objXmlDoc .保存(XML路径);
}
#结束区域
#地区插入一节点不带属性
/**//**************************************************
* 函数名称:XmlInsertElement(字符串xmlPath,字符串主节点,字符串元素,字符串内容)
* 功能说明:插入一节点不带属性
* 参数:xmlPath:xml文档路径;邮件节点:当前节点的路径;元素:新插入的节点;内容:节点的内容
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath('/EBDomainConfig/domain config。XML’);//获取可扩展标记语言路径
* XmlObject .XmlInsertElement(xmlPath,' root/test ',' text1 ','节点内容');//插入一节点不带属性
* 生成的可扩展标记语言格式为
*测试
*文本一节点内容/text1
*/测试
************************************************/
公共静态void XmlInsertElement(字符串xmlPath,字符串主节点,字符串元素,字符串内容)
{
XML document objxml doc=new XML document();
objXmlDoc .加载(XML路径);
XmlNode objNode=objXmlDoc .选择单一节点(主节点);
XmlElement objElement=objXmlDoc .创建元素(元素);
对象元素InnerText=内容;
目标.AppendChild(obj元素);
objXmlDoc .保存(XML路径);
}
#结束区域
//必须创建对象才能使用的类
private bool _ already dispose=false;
私有XML文档XML doc=new XML document();
私有XmlNode xmlNode
私有XmlElement xmlElem
#地区构造与释构
公共XmlHelper()
{
}
~XmlHelper()
{
dispose();
}
受保护的虚拟void Dispose(bool isDisposing)
{
if (_alreadyDispose)返回;
if (isDisposing)
{
//
}
_ alreadyDispose=true
}
#结束区域
#区域IDisposable成员
公共void Dispose()
{
处置(真);
GC .抑制finalize(这个);
}
#结束区域
#地区创建可扩展标记语言文档
/**//**************************************************
* 对象名称:XmlObject
* 功能说明:创建可扩展标记语言文档
* 使用示列:
*使用欧共体;//引用命名空间
* string xmlPath=Server .MapPath(' test。XML’);
* XML object obj=new XML object();
* 创建根节点
*目标CreateXmlRoot(" root ");
* //创建空节点
* //obj .CreatXmlNode('根','节点');
* //创建一个带值的节点
* //obj .CreatXmlNode('root ',' Node ','带值的节点');
* //创建一个仅带属性的节点
* //obj .CreatXmlNode('root ',' Node ',' Attribe ','属性值');
* //创建一个仅带两个属性值的节点
* //obj .CreatXmlNode('root ',' Node ',' Attribe ','属性值,'属性2 ','属性值2');
* //创建一个带属性值的节点值的节点
* //obj .CreatXmlNode('root ',' Node ',' Attribe ','属性值','节点值');
* //在当前节点插入带两个属性值的节点
*目标CreatXmlNode('root ',' Node ',' Attribe ','属性值,'属性2 ','属性值2','节点值');
*目标. XML保存(XML路径);
*目标dispose();
************************************************/
#地区创建一个只有声明和根节点的可扩展标记语言文档
/**////摘要
///创建一个只有声明和根节点的可扩展标记语言文档
////摘要
///param name='root'/param
public void CreateXmlRoot(字符串根)
{
//加入可扩展标记语言的声明段落
xmlNode=xmlDoc .CreateNode(XmlNodeType .XmlDeclaration,'',' ');
xmlDoc .AppendChild(xmlNode);
//加入一个根元素
xmlElem=xmlDoc .CreateElement(",root,");
xmlDoc .AppendChild(XML elem);
}
#结束区域
#地区在当前节点下插入一个空节点节点
/**////摘要
///在当前节点下插入一个空节点节点
////摘要
///param name='mainNode '当前节点路径/param
///param name='node '节点名称/param
public void CreatXmlNode(string mainNode,string node)
{
XmlNode MainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
主节点AppendChild(objElem);
}
#结束区域
#地区在当前节点插入一个仅带值的节点
/**////摘要
///在当前节点插入一个仅带值的节点
////摘要
///param name='mainNode '当前节点/param
///param name='node '新节点/param
///param name='content '新节点值/param
公共void CreatXmlNode(字符串主节点,字符串节点,字符串内容)
{
XmlNode MainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
目标.InnerText=内容;
主节点AppendChild(objElem);
}
#结束区域
#地区在当前节点的插入一个仅带属性值的节点
/**////摘要
///在当前节点的插入一个仅带属性值的节点
////摘要
///param name='MainNode '当前节点或路径/param
///param name='Node '新节点/param
///param name='Attrib '新节点属性名称/param
///param name='AttribValue '新节点属性值/param
public void CreatXmlNode(字符串主节点,字符串节点,字符串属性,字符串属性值)
{
XmlNode mainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
目标.SetAttribute(Attrib,AttribValue);
主节点AppendChild(objElem);
}
#结束区域
#地区创建一个带属性值的节点值的节点
/**////摘要
///创建一个带属性值的节点值的节点
////摘要
///param name='MainNode '当前节点或路径/param
///param name='Node '节点名称/param
///param name='Attrib '属性名称/param
///param name='AttribValue '属性值/param
///param name='Content '节点传情/param
公共void CreatXmlNode(字符串主节点,字符串节点,字符串属性,字符串属性值,字符串内容)
{
XmlNode mainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
目标.SetAttribute(Attrib,AttribValue);
目标.InnerText=内容;
主节点AppendChild(objElem);
}
#结束区域
#地区在当前节点的插入一个仅带2个属性值的节点
/**////摘要
///在当前节点的插入一个仅带2个属性值的节点
////摘要
///param name='MainNode '当前节点或路径/param
///param name='Node '节点名称/param
///param name='Attrib '属性名称一/param
///param name='AttribValue '属性值一/param
///param name='Attrib2 '属性名称二/param
///param name='AttribValue2 '属性值二/param
public void CreatXmlNode(字符串主节点,字符串节点,字符串属性,字符串属性值,字符串属性2,字符串属性值2)
{
XmlNode mainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
目标.SetAttribute(Attrib,AttribValue);
目标.SetAttribute(Attrib2,attrib value 2);
主节点AppendChild(objElem);
}
#结束区域
#地区在当前节点插入带两个属性的节点
/**////摘要
///在当前节点插入带两个属性的节点
////摘要
///param name='MainNode '当前节点或路径/param
///param name='Node '节点名称/param
///param name='Attrib '属性名称一/param
///param name='AttribValue '属性值一/param
///param name='Attrib2 '属性名称二/param
///param name='AttribValue2 '属性值二/param
///param name='Content '节点值/param
公共void CreatXmlNode(字符串主节点,字符串节点,字符串属性,字符串属性值,字符串属性2,字符串属性值2,字符串内容)
{
XmlNode mainNode=xmlDoc .选择单一节点(主节点);
XmlElement objElem=xmlDoc .创建元素(节点);
目标.SetAttribute(Attrib,AttribValue);
目标.SetAttribute(Attrib2,attrib value 2);
目标.InnerText=内容;
主节点AppendChild(objElem);
}
#结束区域
#地区保存可扩展标记语言
/**////摘要
///保存可扩展标记语言
////摘要
///param name='path '保存的当前路径/param
公共void XmlSave(字符串路径)
{
xmlDoc .保存(路径);
}
#结束区域
#结束区域
#地区根据父节点属性值读取子节点值
/**//**************************************************
* 函数名称:GetSubElementByAttribute(字符串XML路径,字符串FatherElenetName,字符串AttributeName,int AttributeIndex,int ArrayLength)
* 功能说明:根据父节点属性值读取子节点值
* 参数:XmlPath:xml路径;父亲网络名:父节点名;AttributeName:属性值;属性索引:属性索引;数组长度:要返回的节点数组长度
* 适应用Xml:
* ArrayList al=new ArrayList();
* al=欧共体.XML对象。GetSubElementByAttribute(XML路径,' page ','/index.aspx ',0,3);
* for(int I=0;我是艾尔。数数;我)
* {
*回应。写(美国)的.ToString());
*回应。写(' br ');
* }
************************************************/
/**////摘要
///根据父节点属性读取字节点值
////摘要
///param name='XmlPath'xml路径/param
///param name='FatherElenetName '父节点名/param
///param name='AttributeName '属性值/param
///param name='AttributeIndex '属性索引/param
///param name='ArrayLength '要返回的节点数组长度/param
///返回/返回
公共静态系统收藏。ArrayList GetSubElementByAttribute(string XML path,string FatherElenetName,string AttributeName,int AttributeIndex,int ArrayLength)
{
系统。数组列表al=新系统收藏。ArrayList();
XML文档doc XML=new XML document();
docXml .load(@ XML path);
XmlNodeList xn=docXml .DocumentElement。子节点
//遍历第一层节点
foreach(xn中的XmlElement元素)
{
//判断父节点是否为指定节点
如果(元素. Name==FatherElenetName)
{
//判断父节点属性的索引是否大于指定索引
如果(元素属性。数数属性索引)
返回空
//判断父节点的属性值是否等于指定属性
如果(元素。属性[属性索引].值==属性名)
{
XmlNodeList xx=element .子节点;
如果(xx .计数0)
{
for(int I=0;我的长度是xx .数数;我)
{
艾尔。添加(xx[i]。InnerText);
}
}
}
}
}
返回al;
}
#结束区域
#地区根据节点属性读取子节点值(较省资源模式)
/**//**************************************************
* 函数名称:GetSubElementByAttribute(字符串XML路径,字符串父元素,字符串属性名称,字符串属性值,int数组长度)
* 功能说明:根据父节点属性值读取子节点值
* 参数:XmlPath:xml路径;父亲网络名:父节点名;AttributeName:属性名;属性值:属性值;数组长度:要返回的节点数组长度
* 适应用Xml:
* ArrayList al=n
ew ArrayList(); * al = EC.XmlObject.GetSubElementByAttribute(XmlPath, "page", "@name", "/index.aspx", 3); * for (int i = 0; i < al.Count; i++) * { * Response.Write(al[i].ToString()); * Response.Write("<br>"); * } ************************************************/ /**//// <summary> /// 根据节点属性读取子节点值(较省资源模式) /// </summary> /// <param name="XmlPath">xml路径</param> /// <param name="FatherElement">父节点值</param> /// <param name="AttributeName">属性名称</param> /// <param name="AttributeValue">属性值</param> /// <param name="ArrayLength">返回的数组长度</param> /// <returns></returns> public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength) { System.Collections.ArrayList al = new System.Collections.ArrayList(); XmlDocument docXml = new XmlDocument(); docXml.Load(@XmlPath); XmlNodeList xn; xn = docXml.DocumentElement.SelectNodes("//" + FatherElement + "[" + @AttributeName + "='" + AttributeValue + "']"); XmlNodeList xx = xn.Item(0).ChildNodes; for (int i = 0; i < ArrayLength & i < xx.Count; i++) { al.Add(xx.Item(i).InnerText); } return al; } #endregion } }更多关于C#相关内容感兴趣的读者可查看本站专题:《C#程序设计之线程使用技巧总结》、《C#操作Excel技巧总结》、《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程》
希望本文所述对大家C#程序设计有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。