现在能读出来 但是无法对单个节点进行修改不知道错在哪里
c#代码如下, 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.Collections; 
using System.Xml;
namespace CXianFeng.Tools
{
    /// <summary> 
    /// XmlOp类提供对XML数据库的读写 
    /// </summary> 
    public class OperatXML
    {
        //声明一个XmlDocument空对象 
        protected XmlDocument XmlDoc = new XmlDocument();        /// <summary> 
        /// 构造函数,导入Xml文件 
        /// </summary> 
        /// <param name="xmlFile">文件虚拟路径 </param> 
        public OperatXML(string xmlFile)
        {
            try
            {
                XmlDoc.Load(GetXmlFilePath(xmlFile)); //载入Xml文档 
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }
        /// <summary> 
        /// 析构函数 
        /// </summary> 
        OperatXML()
        {
            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;
                    }
                }
            }
            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> 
        /// XPath表达式,
        /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
        /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
        /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
        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;
            }
        }
    }
}
使用代码 OperatXML oxInfo = new OperatXML("/xml/siteinfo.xml");//网站基本信息
 oxInfo.UpdateNode(@"siteconfig/siteinfo/sitename", textSiteName);

解决方案 »

  1.   

    XmlDoc.Save("xml/siteinfo.xml")因为目前你加载的文档还在内存中,没有写到物理磁盘上面。
      

  2.   

    加上了也是保存不了 public bool UpdateNode(string xmlPath,string XmlPathNode, string NodeContent)
            {
                try
                {
                    XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent;
                    XmlDoc.Save(HttpContext.Current.Server.MapPath("xmlPath"));
                    return true;
                }
                catch
                {
                    return false;
                }
            }
      

  3.   

    public bool UpdateNode(string xmlPath,string XmlPathNode, string NodeContent)
            {
                try
                {
                    XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent;
                    XmlDoc.Save(HttpContext.Current.Server.MapPath("xmlPath"));//错了
                    XmlDoc.Save(HttpContext.Current.Server.MapPath(xmlPath));
                    return true;
                }
                catch
                {
                    return false;
                }
            }