Asp.Net+XML操作基类(修改,删除,新增,创建)第1/2页
程序员文章站
2023-02-13 19:08:05
/********************************************************************************** &n...
/**********************************************************************************
*
* 功能说明:xml处理基类
* 作者: 刘功勋;
* 版本:v0.1(c#2.0);时间:2006-12-13
*
* *******************************************************************************/
using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
using system.xml;
using system.text;
using msxml2;
namespace ec
{
/// <summary>
/// xml 操作基类
/// </summary>
public class xmlobject : idisposable
{
//以下为单一功能的静态类
#region 读取xml到dataset
/**************************************************
* 函数名称:getxml(string xmlpath)
* 功能说明:读取xml到dataset
* 参 数:xmlpath:xml文档路径
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdnsconfig/dnsconfig.xml"); //获取xml路径
* dataset ds = ec.xmlobject.getxml(xmlpath); //读取xml到dataset中
************************************************/
/// <summary>
/// 功能:读取xml到dataset中
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <returns>dataset</returns>
public static dataset getxml(string xmlpath)
{
dataset ds = new dataset();
ds.readxml(@xmlpath);
return ds;
}
#endregion
#region 读取xml文档并返回一个节点
/**************************************************
* 函数名称:readxmlreturnnode(string xmlpath,string node)
* 功能说明:读取xml文档并返回一个节点:适用于一级节点
* 参 数: xmlpath:xml文档路径;node 返回的节点名称
* 适应用xml:<?xml version="1.0" encoding="utf-8" ?>
* <root>
* <dns1>ns1.everdns.com</dns1>
* </root>
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdnsconfig/dnsconfig.xml"); //获取xml路径
* response.write(xmlobject.readxmlreturnnode(xmlpath, "mailmanager"));
************************************************/
/// <summary>
/// 读取xml文档并返回一个节点:适用于一级节点
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="nodename">节点</param>
/// <returns></returns>
public static string readxmlreturnnode(string xmlpath,string node)
{
xmldocument docxml = new xmldocument();
docxml.load(@xmlpath);
xmlnodelist xn = docxml.getelementsbytagname(node);
return xn.item(0).innertext.tostring();
}
#endregion
#region 查找数据,返回一个dataset
/**************************************************
* 函数名称:getxmldata(string xmlpath, string xmlpathnode)
* 功能说明:查找数据,返回当前节点的所有下级节点,填充到一个dataset中
* 参 数:xmlpath:xml文档路径;xmlpathnode:当前节点的路径
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* dataset ds = new dataset();
* ds = xmlobject.getxmldata(xmlpath, "root/items");//读取当前路径
* this.gridview1.datasource = ds;
* this.gridview1.databind();
* ds.clear();
* ds.dispose();
* xml示例:
* <?xml version="1.0" encoding="utf-8" ?>
* <root>
* <items name="xinnet">
* <url>http://www.paycenter.com.cn/cgi-bin/</url>
* <port>80</port>
* </items>
* </root>
************************************************/
/// <summary>
/// 查找数据,返回当前节点的所有下级节点,填充到一个dataset中
/// </summary>
/// <param name="xmlpath">xml文档路径</param>
/// <param name="xmlpathnode">节点的路径:根节点/父节点/当前节点</param>
/// <returns></returns>
public static dataset getxmldata(string xmlpath, string xmlpathnode)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
dataset ds = new dataset();
stringreader read = new stringreader(objxmldoc.selectsinglenode(xmlpathnode).outerxml);
ds.readxml(read);
return ds;
}
#endregion
#region 更新xml节点内容
/**************************************************
* 函数名称:xmlnodereplace(string xmlpath,string node,string content)
* 功能说明:更新xml节点内容
* 参 数:xmlpath:xml文档路径;node:当前节点的路径;content:内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlnodereplace(xmlpath, "root/test", "56789"); //更新节点内容
************************************************/
/// <summary>
/// 更新xml节点内容
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="node">要更换内容的节点:节点路径 根节点/父节点/当前节点</param>
/// <param name="content">新的内容</param>
public static void xmlnodereplace(string xmlpath,string node,string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
objxmldoc.selectsinglenode(node).innertext = content;
objxmldoc.save(xmlpath);
}
#endregion
#region 删除xml节点和此节点下的子节点
/**************************************************
* 函数名称:xmlnodedelete(string xmlpath,string node)
* 功能说明:删除xml节点和此节点下的子节点
* 参 数:xmlpath:xml文档路径;node:当前节点的路径;
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlnodedelete(xmlpath, "root/test"); //删除当前节点
************************************************/
/// <summary>
/// 删除xml节点和此节点下的子节点
/// </summary>
/// <param name="xmlpath">xml文档路径</param>
/// <param name="node">节点路径</param>
public static void xmlnodedelete(string xmlpath,string node)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
string mainnode = node.substring(0, node.lastindexof("/"));
objxmldoc.selectsinglenode(mainnode).removechild(objxmldoc.selectsinglenode(node));
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一个节点和此节点的字节点
/**************************************************
* 函数名称:xmlinsertnode(string xmlpath, string mailnode, string childnode, string element,string content)
* 功能说明:插入一个节点和此节点的字节点
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;childnode:新插入的节点;element:插入节点的子节点;content:子节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertnode(xmlpath, "root/test","test1","test2","测试内容"); //插入一个节点和此节点的字节点
* 生成的xml格式为
* <test>
* <test1>
* <test2>测试内容</test2>
* </test1>
* </test>
************************************************/
/// <summary>
/// 插入一个节点和此节点的字节点
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="mailnode">当前节点路径</param>
/// <param name="childnode">新插入节点</param>
/// <param name="element">插入节点的子节点</param>
/// <param name="content">子节点的内容</param>
public static void xmlinsertnode(string xmlpath, string mailnode, string childnode, string element,string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objrootnode = objxmldoc.selectsinglenode(mailnode);
xmlelement objchildnode = objxmldoc.createelement(childnode);
objrootnode.appendchild(objchildnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.innertext = content;
objchildnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一节点,带一属性
/**************************************************
* 函数名称:xmlinsertelement(string xmlpath, string mainnode, string element, string attrib, string attribcontent, string content)
* 功能说明:插入一节点,带一属性
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;element:新插入的节点;attrib:属性名称;attribcontent:属性值;content:节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertelement(xmlpath, "root/test", "test1", "attrib", "属性值", "节点内容"); //插入一节点,带一属性
* 生成的xml格式为
* <test>
* <test1 attrib="属性值">节点内容</test1>
* </test>
************************************************/
/// <summary>
/// 插入一节点,带一属性
/// </summary>
/// <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>
public static void xmlinsertelement(string xmlpath, string mainnode, string element, string attrib, string attribcontent, string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objnode = objxmldoc.selectsinglenode(mainnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.setattribute(attrib, attribcontent);
objelement.innertext = content;
objnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一节点不带属性
/**************************************************
* 函数名称:xmlinsertelement(string xmlpath, string mainnode, string element, string content)
* 功能说明:插入一节点不带属性
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;element:新插入的节点;content:节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertelement(xmlpath, "root/test", "text1", "节点内容"); //插入一节点不带属性
* 生成的xml格式为
* <test>
* <text1>节点内容</text1>
* </test>
************************************************/
public static void xmlinsertelement(string xmlpath, string mainnode, string element, string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objnode = objxmldoc.selectsinglenode(mainnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.innertext = content;
objnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
//必须创建对象才能使用的类
private bool _alreadydispose = false;
private string xmlpath;
private xmldocument xmldoc=new xmldocument();
private xmlnode xmlnode;
private xmlelement xmlelem;
#region 构造与释构
public xmlobject()
{
}
~xmlobject()
{
dispose();
}
protected virtual void dispose(bool isdisposing)
{
if (_alreadydispose) return;
if (isdisposing)
{
//
}
_alreadydispose = true;
}
#endregion
#region idisposable 成员
public void dispose()
{
dispose(true);
gc.suppressfinalize(this);
}
#endregion
*
* 功能说明:xml处理基类
* 作者: 刘功勋;
* 版本:v0.1(c#2.0);时间:2006-12-13
*
* *******************************************************************************/
using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
using system.xml;
using system.text;
using msxml2;
namespace ec
{
/// <summary>
/// xml 操作基类
/// </summary>
public class xmlobject : idisposable
{
//以下为单一功能的静态类
#region 读取xml到dataset
/**************************************************
* 函数名称:getxml(string xmlpath)
* 功能说明:读取xml到dataset
* 参 数:xmlpath:xml文档路径
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdnsconfig/dnsconfig.xml"); //获取xml路径
* dataset ds = ec.xmlobject.getxml(xmlpath); //读取xml到dataset中
************************************************/
/// <summary>
/// 功能:读取xml到dataset中
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <returns>dataset</returns>
public static dataset getxml(string xmlpath)
{
dataset ds = new dataset();
ds.readxml(@xmlpath);
return ds;
}
#endregion
#region 读取xml文档并返回一个节点
/**************************************************
* 函数名称:readxmlreturnnode(string xmlpath,string node)
* 功能说明:读取xml文档并返回一个节点:适用于一级节点
* 参 数: xmlpath:xml文档路径;node 返回的节点名称
* 适应用xml:<?xml version="1.0" encoding="utf-8" ?>
* <root>
* <dns1>ns1.everdns.com</dns1>
* </root>
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdnsconfig/dnsconfig.xml"); //获取xml路径
* response.write(xmlobject.readxmlreturnnode(xmlpath, "mailmanager"));
************************************************/
/// <summary>
/// 读取xml文档并返回一个节点:适用于一级节点
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="nodename">节点</param>
/// <returns></returns>
public static string readxmlreturnnode(string xmlpath,string node)
{
xmldocument docxml = new xmldocument();
docxml.load(@xmlpath);
xmlnodelist xn = docxml.getelementsbytagname(node);
return xn.item(0).innertext.tostring();
}
#endregion
#region 查找数据,返回一个dataset
/**************************************************
* 函数名称:getxmldata(string xmlpath, string xmlpathnode)
* 功能说明:查找数据,返回当前节点的所有下级节点,填充到一个dataset中
* 参 数:xmlpath:xml文档路径;xmlpathnode:当前节点的路径
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* dataset ds = new dataset();
* ds = xmlobject.getxmldata(xmlpath, "root/items");//读取当前路径
* this.gridview1.datasource = ds;
* this.gridview1.databind();
* ds.clear();
* ds.dispose();
* xml示例:
* <?xml version="1.0" encoding="utf-8" ?>
* <root>
* <items name="xinnet">
* <url>http://www.paycenter.com.cn/cgi-bin/</url>
* <port>80</port>
* </items>
* </root>
************************************************/
/// <summary>
/// 查找数据,返回当前节点的所有下级节点,填充到一个dataset中
/// </summary>
/// <param name="xmlpath">xml文档路径</param>
/// <param name="xmlpathnode">节点的路径:根节点/父节点/当前节点</param>
/// <returns></returns>
public static dataset getxmldata(string xmlpath, string xmlpathnode)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
dataset ds = new dataset();
stringreader read = new stringreader(objxmldoc.selectsinglenode(xmlpathnode).outerxml);
ds.readxml(read);
return ds;
}
#endregion
#region 更新xml节点内容
/**************************************************
* 函数名称:xmlnodereplace(string xmlpath,string node,string content)
* 功能说明:更新xml节点内容
* 参 数:xmlpath:xml文档路径;node:当前节点的路径;content:内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlnodereplace(xmlpath, "root/test", "56789"); //更新节点内容
************************************************/
/// <summary>
/// 更新xml节点内容
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="node">要更换内容的节点:节点路径 根节点/父节点/当前节点</param>
/// <param name="content">新的内容</param>
public static void xmlnodereplace(string xmlpath,string node,string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
objxmldoc.selectsinglenode(node).innertext = content;
objxmldoc.save(xmlpath);
}
#endregion
#region 删除xml节点和此节点下的子节点
/**************************************************
* 函数名称:xmlnodedelete(string xmlpath,string node)
* 功能说明:删除xml节点和此节点下的子节点
* 参 数:xmlpath:xml文档路径;node:当前节点的路径;
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlnodedelete(xmlpath, "root/test"); //删除当前节点
************************************************/
/// <summary>
/// 删除xml节点和此节点下的子节点
/// </summary>
/// <param name="xmlpath">xml文档路径</param>
/// <param name="node">节点路径</param>
public static void xmlnodedelete(string xmlpath,string node)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
string mainnode = node.substring(0, node.lastindexof("/"));
objxmldoc.selectsinglenode(mainnode).removechild(objxmldoc.selectsinglenode(node));
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一个节点和此节点的字节点
/**************************************************
* 函数名称:xmlinsertnode(string xmlpath, string mailnode, string childnode, string element,string content)
* 功能说明:插入一个节点和此节点的字节点
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;childnode:新插入的节点;element:插入节点的子节点;content:子节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertnode(xmlpath, "root/test","test1","test2","测试内容"); //插入一个节点和此节点的字节点
* 生成的xml格式为
* <test>
* <test1>
* <test2>测试内容</test2>
* </test1>
* </test>
************************************************/
/// <summary>
/// 插入一个节点和此节点的字节点
/// </summary>
/// <param name="xmlpath">xml路径</param>
/// <param name="mailnode">当前节点路径</param>
/// <param name="childnode">新插入节点</param>
/// <param name="element">插入节点的子节点</param>
/// <param name="content">子节点的内容</param>
public static void xmlinsertnode(string xmlpath, string mailnode, string childnode, string element,string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objrootnode = objxmldoc.selectsinglenode(mailnode);
xmlelement objchildnode = objxmldoc.createelement(childnode);
objrootnode.appendchild(objchildnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.innertext = content;
objchildnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一节点,带一属性
/**************************************************
* 函数名称:xmlinsertelement(string xmlpath, string mainnode, string element, string attrib, string attribcontent, string content)
* 功能说明:插入一节点,带一属性
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;element:新插入的节点;attrib:属性名称;attribcontent:属性值;content:节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertelement(xmlpath, "root/test", "test1", "attrib", "属性值", "节点内容"); //插入一节点,带一属性
* 生成的xml格式为
* <test>
* <test1 attrib="属性值">节点内容</test1>
* </test>
************************************************/
/// <summary>
/// 插入一节点,带一属性
/// </summary>
/// <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>
public static void xmlinsertelement(string xmlpath, string mainnode, string element, string attrib, string attribcontent, string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objnode = objxmldoc.selectsinglenode(mainnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.setattribute(attrib, attribcontent);
objelement.innertext = content;
objnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
#region 插入一节点不带属性
/**************************************************
* 函数名称:xmlinsertelement(string xmlpath, string mainnode, string element, string content)
* 功能说明:插入一节点不带属性
* 参 数:xmlpath:xml文档路径;mailnode:当前节点的路径;element:新插入的节点;content:节点的内容
* 使用示列:
* using ec; //引用命名空间
* string xmlpath = server.mappath("/ebdomainconfig/domainconfig.xml"); //获取xml路径
* xmlobject.xmlinsertelement(xmlpath, "root/test", "text1", "节点内容"); //插入一节点不带属性
* 生成的xml格式为
* <test>
* <text1>节点内容</text1>
* </test>
************************************************/
public static void xmlinsertelement(string xmlpath, string mainnode, string element, string content)
{
xmldocument objxmldoc = new xmldocument();
objxmldoc.load(xmlpath);
xmlnode objnode = objxmldoc.selectsinglenode(mainnode);
xmlelement objelement = objxmldoc.createelement(element);
objelement.innertext = content;
objnode.appendchild(objelement);
objxmldoc.save(xmlpath);
}
#endregion
//必须创建对象才能使用的类
private bool _alreadydispose = false;
private string xmlpath;
private xmldocument xmldoc=new xmldocument();
private xmlnode xmlnode;
private xmlelement xmlelem;
#region 构造与释构
public xmlobject()
{
}
~xmlobject()
{
dispose();
}
protected virtual void dispose(bool isdisposing)
{
if (_alreadydispose) return;
if (isdisposing)
{
//
}
_alreadydispose = true;
}
#endregion
#region idisposable 成员
public void dispose()
{
dispose(true);
gc.suppressfinalize(this);
}
#endregion
1