c# 编辑XML文件 XML文件为从SQL数据库中转换出来的,现在要脱离数据库,直接打开XML文件,对XML批量编辑(添加,修改,删除,查询)后再保存到XML文件中(或者说是替换原先打开的XML文件),该怎么做,给个思想和重点的源码~~~谢谢了!(将XML文件导入平台已经实现,我是导入到DataGridView中,有没有其他更好的方法) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ///////////////////////////////////////////////////////////处理XML的操作类///////////////////////////////////////////////// <summary>/// XmlOp类提供对XML数据库的读写/// </summary>public class XmlOp{ //声明一个XmlDocument空对象 protected XmlDocument XmlDoc = new XmlDocument(); /// <summary> /// 构造函数,导入Xml文件 /// </summary> /// <param name="xmlFile">文件虚拟路径</param> public XmlOp(string xmlFile) { try { XmlDoc.Load(GetXmlFilePath(xmlFile)); //载入Xml文档 } catch (System.Exception ex) { throw ex; } } /// <summary> /// 析构函数 /// </summary> ~XmlOp() { XmlDoc = null; //释放XmlDocument对象 } /// <summary> /// 保存文件 /// </summary> /// <param name="filePath">文件虚拟路径</param> public void Save(string filePath) { try { XmlDoc.Save(GetXmlFilePath(filePath)); } catch (System.Exception ex) { throw ex; } } /// <summary> /// 返回Xml文件实际路径 /// </summary> /// <param name="xmlFile">文件虚拟路径</param> /// <returns></returns> public string GetXmlFilePath(string xmlFile) { return HttpContext.Current.Server.MapPath(xmlFile); } /// <summary> /// 根据Xml文件的节点路径,返回一个DataSet数据集 /// </summary> /// <param name="XmlPathNode">Xml文件的某个节点</param> /// <returns></returns> public DataSet GetDs(string XmlPathNode) { DataSet ds = new DataSet(); try { System.IO.StringReader read = new System.IO.StringReader(XmlDoc.SelectSingleNode(XmlPathNode).OuterXml); ds.ReadXml(read); //利用DataSet的ReadXml方法读取StringReader文件流 read.Close(); } catch { } return ds; } /// <summary> /// 属性查询,返回属性值 /// </summary> /// <param name="XmlPathNode">属性所在的节点</param> /// <param name="Attrib">属性</param> /// <returns></returns> public string SelectAttrib(string XmlPathNode, string Attrib) { string _strNode = ""; try { _strNode = XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value; } catch { } return _strNode; } /// <summary> /// 节点查询,返回节点值 /// </summary> /// <param name="XmlPathNode">节点的路径</param> /// <returns></returns> public string SelectNodeText(string XmlPathNode) { string _nodeTxt = XmlDoc.SelectSingleNode(XmlPathNode).InnerText; if (_nodeTxt == null || _nodeTxt == "") return ""; else return _nodeTxt; } /// <summary> /// 节点值查询判断 /// </summary> /// <param name="XmlPathNode">父节点</param> /// <param name="index">节点索引</param> /// <param name="NodeText">节点值</param> /// <returns></returns> public bool SelectNode(string XmlPathNode, int index, string NodeText) { try { XmlNodeList _NodeList = XmlDoc.SelectNodes(XmlPathNode); //循环遍历节点,查询是否存在该节点 for (int i = 0; i < _NodeList.Count; i++) { if (_NodeList[i].ChildNodes[index].InnerText == NodeText) { return true; break; } } } catch { } return false; } /// <summary> /// 获取子节点个数 /// </summary> /// <param name="XmlPathNode">父节点</param> /// <returns></returns> public int NodeCount(string XmlPathNode) { int i = 0; try { i = XmlDoc.SelectSingleNode(XmlPathNode).ChildNodes.Count; } catch { i = 0; } return i; } /// <summary> /// 更新一个节点的内容 /// </summary> /// <param name="XmlPathNode">节点的路径</param> /// <param name="Content">新的节点值</param> /// <returns></returns> public bool UpdateNode(string XmlPathNode, string NodeContent) { try { XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent; return true; } catch { return false; } } /// <summary> /// 更新N个节点值 /// </summary> /// <param name="XmlParentNode">父节点</param> /// <param name="XmlNode">子节点</param> /// <param name="NodeContent">子节点内容</param> /// <returns></returns> public bool UpdateNode(string XmlParentNode, string[] XmlNode, string[] NodeContent) { try { //根据节点数组循环修改节点值 for (int i = 0; i < XmlNode.Length; i++) { XmlDoc.SelectSingleNode(XmlParentNode + "/" + XmlNode[i]).InnerText = NodeContent[i]; } return true; } catch { return false; } } /// <summary> /// 修改属性 /// </summary> /// <param name="XmlPathNode">属性所在的节点</param> /// <param name="Attrib">属性名</param> /// <param name="Content">属性值</param> /// <returns></returns> public bool UpdateAttrib(string XmlPathNode, string Attrib, string AttribContent) { try { //修改属性值 XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value = AttribContent; return true; } catch { return false; } } /// <summary> /// 添加属性 /// </summary> /// <param name="MainNode">属性所在节点</param> /// <param name="Attrib">属性名</param> /// <param name="AttribContent">属性值</param> /// <returns></returns> public bool InsertAttrib(string MainNode, string Attrib, string AttribContent) { try { XmlElement objNode = (XmlElement)XmlDoc.SelectSingleNode(MainNode); //强制转化成XmlElement对象 objNode.SetAttribute(Attrib, AttribContent); //XmlElement对象添加属性方法 return true; } catch { return false; } } /// <summary> /// 插入一个节点,带N个子节点 /// </summary> /// <param name="MainNode">插入节点的父节点</param> /// <param name="ChildNode">插入节点的元素名</param> /// <param name="Element">插入节点的子节点名数组</param> /// <param name="Content">插入节点的子节点内容数组</param> /// <returns></returns> public bool InsertNode(string MainNode, string ChildNode, string[] Element, string[] Content) { try { XmlNode objRootNode = XmlDoc.SelectSingleNode(MainNode); //声明XmlNode对象 XmlElement objChildNode = XmlDoc.CreateElement(ChildNode); //创建XmlElement对象 objRootNode.AppendChild(objChildNode); for (int i = 0; i < Element.Length; i++) //循环插入节点元素 { XmlElement objElement = XmlDoc.CreateElement(Element[i]); objElement.InnerText = Content[i]; objChildNode.AppendChild(objElement); } return true; } catch { return false; } } /// <summary> /// 删除一个节点 /// </summary> /// <param name="Node">要删除的节点</param> /// <returns></returns> public bool DeleteNode(string Node) { try { //XmlNode的RemoveChild方法来删除节点及其所有子节点 XmlDoc.SelectSingleNode(Node).ParentNode.RemoveChild(XmlDoc.SelectSingleNode(Node)); return true; } catch { return false; } }}给个操作XML的类,网上很多 http://www.cnblogs.com/yagebuqq/articles/1206496.html 访问我的博客 程序员日记 http://www.ideaext.com gridView中绑定列的绑定表达式(DataField)? C# 方法中语法问题 工厂模式中,具体产品的接口要一致吗? winform中webbrowser的url属性问题 数据类型转换 如果有台服务器A,怎么样才知道有哪些机器登录到此服务器上! C#复制文件问题? 跨数据库连表查询问题 困难问题 ***高人请进入***在C#中,如何使用STI.dll这类型的API函数? 在析构函数中关闭StreamWriter为什么报错? 关于入门经典中WEB编程,创建强类型Previouspage示例
//////////////////////////////////////////
/////////
////////处理XML的操作类
///////
///////////////////////////////////////
/// <summary>
/// XmlOp类提供对XML数据库的读写
/// </summary>
public class XmlOp
{
//声明一个XmlDocument空对象
protected XmlDocument XmlDoc = new XmlDocument(); /// <summary>
/// 构造函数,导入Xml文件
/// </summary>
/// <param name="xmlFile">文件虚拟路径</param>
public XmlOp(string xmlFile)
{
try
{
XmlDoc.Load(GetXmlFilePath(xmlFile)); //载入Xml文档
}
catch (System.Exception ex)
{
throw ex;
}
}
/// <summary>
/// 析构函数
/// </summary>
~XmlOp()
{
XmlDoc = null; //释放XmlDocument对象
} /// <summary>
/// 保存文件
/// </summary>
/// <param name="filePath">文件虚拟路径</param>
public void Save(string filePath)
{
try
{
XmlDoc.Save(GetXmlFilePath(filePath));
}
catch (System.Exception ex)
{
throw ex;
}
} /// <summary>
/// 返回Xml文件实际路径
/// </summary>
/// <param name="xmlFile">文件虚拟路径</param>
/// <returns></returns>
public string GetXmlFilePath(string xmlFile)
{
return HttpContext.Current.Server.MapPath(xmlFile);
} /// <summary>
/// 根据Xml文件的节点路径,返回一个DataSet数据集
/// </summary>
/// <param name="XmlPathNode">Xml文件的某个节点</param>
/// <returns></returns>
public DataSet GetDs(string XmlPathNode)
{
DataSet ds = new DataSet();
try
{
System.IO.StringReader read = new System.IO.StringReader(XmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
ds.ReadXml(read); //利用DataSet的ReadXml方法读取StringReader文件流
read.Close();
}
catch
{ }
return ds;
} /// <summary>
/// 属性查询,返回属性值
/// </summary>
/// <param name="XmlPathNode">属性所在的节点</param>
/// <param name="Attrib">属性</param>
/// <returns></returns>
public string SelectAttrib(string XmlPathNode, string Attrib)
{
string _strNode = "";
try
{
_strNode = XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value;
}
catch
{ }
return _strNode;
} /// <summary>
/// 节点查询,返回节点值
/// </summary>
/// <param name="XmlPathNode">节点的路径</param>
/// <returns></returns>
public string SelectNodeText(string XmlPathNode)
{
string _nodeTxt = XmlDoc.SelectSingleNode(XmlPathNode).InnerText;
if (_nodeTxt == null || _nodeTxt == "")
return "";
else
return _nodeTxt;
} /// <summary>
/// 节点值查询判断
/// </summary>
/// <param name="XmlPathNode">父节点</param>
/// <param name="index">节点索引</param>
/// <param name="NodeText">节点值</param>
/// <returns></returns>
public bool SelectNode(string XmlPathNode, int index, string NodeText)
{
try
{
XmlNodeList _NodeList = XmlDoc.SelectNodes(XmlPathNode);
//循环遍历节点,查询是否存在该节点
for (int i = 0; i < _NodeList.Count; i++)
{
if (_NodeList[i].ChildNodes[index].InnerText == NodeText)
{
return true;
break;
}
}
}
catch
{
}
return false;
} /// <summary>
/// 获取子节点个数
/// </summary>
/// <param name="XmlPathNode">父节点</param>
/// <returns></returns>
public int NodeCount(string XmlPathNode)
{
int i = 0;
try
{
i = XmlDoc.SelectSingleNode(XmlPathNode).ChildNodes.Count;
}
catch
{
i = 0;
}
return i;
} /// <summary>
/// 更新一个节点的内容
/// </summary>
/// <param name="XmlPathNode">节点的路径</param>
/// <param name="Content">新的节点值</param>
/// <returns></returns>
public bool UpdateNode(string XmlPathNode, string NodeContent)
{
try
{
XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent;
return true;
}
catch
{
return false;
}
} /// <summary>
/// 更新N个节点值
/// </summary>
/// <param name="XmlParentNode">父节点</param>
/// <param name="XmlNode">子节点</param>
/// <param name="NodeContent">子节点内容</param>
/// <returns></returns>
public bool UpdateNode(string XmlParentNode, string[] XmlNode, string[] NodeContent)
{
try
{
//根据节点数组循环修改节点值
for (int i = 0; i < XmlNode.Length; i++)
{
XmlDoc.SelectSingleNode(XmlParentNode + "/" + XmlNode[i]).InnerText = NodeContent[i];
}
return true;
}
catch
{
return false;
}
} /// <summary>
/// 修改属性
/// </summary>
/// <param name="XmlPathNode">属性所在的节点</param>
/// <param name="Attrib">属性名</param>
/// <param name="Content">属性值</param>
/// <returns></returns>
public bool UpdateAttrib(string XmlPathNode, string Attrib, string AttribContent)
{
try
{
//修改属性值
XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value = AttribContent;
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 添加属性
/// </summary>
/// <param name="MainNode">属性所在节点</param>
/// <param name="Attrib">属性名</param>
/// <param name="AttribContent">属性值</param>
/// <returns></returns>
public bool InsertAttrib(string MainNode, string Attrib, string AttribContent)
{
try
{
XmlElement objNode = (XmlElement)XmlDoc.SelectSingleNode(MainNode); //强制转化成XmlElement对象
objNode.SetAttribute(Attrib, AttribContent); //XmlElement对象添加属性方法
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 插入一个节点,带N个子节点
/// </summary>
/// <param name="MainNode">插入节点的父节点</param>
/// <param name="ChildNode">插入节点的元素名</param>
/// <param name="Element">插入节点的子节点名数组</param>
/// <param name="Content">插入节点的子节点内容数组</param>
/// <returns></returns>
public bool InsertNode(string MainNode, string ChildNode, string[] Element, string[] Content)
{
try
{
XmlNode objRootNode = XmlDoc.SelectSingleNode(MainNode); //声明XmlNode对象
XmlElement objChildNode = XmlDoc.CreateElement(ChildNode); //创建XmlElement对象
objRootNode.AppendChild(objChildNode);
for (int i = 0; i < Element.Length; i++) //循环插入节点元素
{
XmlElement objElement = XmlDoc.CreateElement(Element[i]);
objElement.InnerText = Content[i];
objChildNode.AppendChild(objElement);
}
return true;
}
catch
{
return false;
}
} /// <summary>
/// 删除一个节点
/// </summary>
/// <param name="Node">要删除的节点</param>
/// <returns></returns>
public bool DeleteNode(string Node)
{
try
{
//XmlNode的RemoveChild方法来删除节点及其所有子节点
XmlDoc.SelectSingleNode(Node).ParentNode.RemoveChild(XmlDoc.SelectSingleNode(Node));
return true;
}
catch
{
return false;
}
}
}给个操作XML的类,网上很多