xml操作学习(一)---运用XmlDocument对象操作Xml

来源:互联网 发布:飞利浦空气净化器 知乎 编辑:程序博客网 时间:2024/06/08 06:46

今天学习了有关xml操作的方法,收货不少,下面是代码,其中删除要特别注意(下面已说明)

 

/// <summary>
    /// 添加xml节点
    /// </summary>
    protected void AddXmlNode()
    {
        //创建xml文档实例
        XmlDocument xmlDoc = new XmlDocument();

        //获取网站物理路径
        string path = Server.MapPath(".");

        //加载对应的xml文档
        xmlDoc.Load(path+"//BookStore.xml");

        //获取xml文档中的根节点
        //XmlNode root = xmlDoc.SelectSingleNode("BookStore");

        //和上面的方法的效果一样
        XmlElement rootElement = xmlDoc.DocumentElement;

        //通过xml文档创建xml节点元素Book
        XmlElement xmlEleBook = xmlDoc.CreateElement("Book");

        //设置xml节点元素的属性
        xmlEleBook.SetAttribute("genre", "李赞红");
        xmlEleBook.SetAttribute("ISBN", "2-3631-4");

        //通过xml文档创建Book节点元素下的子节点元素Title
        XmlElement xmlEleTitle = xmlDoc.CreateElement("Title");

        //设置xml节点内的文本
        xmlEleTitle.InnerText = "CS从入门到精通";

        //将Title节点元素添加到Book节点元素下
        xmlEleBook.AppendChild(xmlEleTitle);

        //通过xml文档创建Book节点元素下的子节点元素Author
        XmlElement xmlEleAuthor = xmlDoc.CreateElement("Author");
       
        //设置xml节点内的文本
        xmlEleAuthor.InnerText = "侯捷";

        //将Author节点元素添加到Book节点元素下
        xmlEleBook.AppendChild(xmlEleAuthor);

        //通过xml文档创建Book节点元素下的子节点元素Price
        XmlElement xmlElePrice = xmlDoc.CreateElement("Price");

        //设置xml节点内的文本
        xmlElePrice.InnerText = "58.3";

        //将Price节点添加到Book节点元素下
        xmlEleBook.AppendChild(xmlElePrice);

        //将Book节点添加到根节点下
        //root.AppendChild(xmlEleBook);

        rootElement.AppendChild(xmlEleBook);

        //保存xml文档
        xmlDoc.Save(path+"//BookStore.xml");
    }

    /// <summary>
    /// 更新xml节点
    /// </summary>
    protected void UpdateXmlNode()
    {
        //创建xml文档实例
        XmlDocument xmlDoc = new XmlDocument();

        //获取网站物理路径
        string path=Server.MapPath(".");

        //加载相对应的xml文档
        xmlDoc.Load(path + "//BookStore.xml");

        //获取根节点
        XmlNode rootElement = xmlDoc.DocumentElement;

        //获取根节点下面的所有子节点
        XmlNodeList xmlNodeList = rootElement.ChildNodes;
       
        //循环遍历节点
        foreach (XmlNode node in xmlNodeList)
        {
            XmlElement xmlEle = (XmlElement)node;
            if (xmlEle.GetAttribute("genre") == "李赞红")
            {
                xmlEle.SetAttribute("genre", "zhou");
            }
        }
        //保存更改
        xmlDoc.Save(path + "//BookStore.xml");
    }

    protected void DelXmlNode()
    {
        //实例xml文档
        XmlDocument xmlDoc = new XmlDocument();

        //获取网站物理路径
        string path=Server.MapPath(".");

        //加载对应的xml文档
        xmlDoc.Load(path + "//BookStore.xml");

        //获取根节点
        XmlElement rootElement = xmlDoc.DocumentElement;

        //获取根节点下的所有子节点
        XmlNodeList nodeList = rootElement.ChildNodes;

        #region  下面的两种方法删除节点会有问题,因为删除的同时集合数量变小,所以就不能删除相应的节点,后面的方法删除
        //遍历子节点
        //foreach (XmlNode node in nodeList)
        //{
        //    XmlElement xmlEle = (XmlElement)node;
        //    if (xmlEle.GetAttribute("genre") == "zhou")
        //    {
        //        //删除子节点
        //        rootElement.RemoveChild(node);
        //    }
        //}

        //for (int i = 0; i < nodeList.Count; i++)
        //{
        //    XmlElement xmlEle = (XmlElement)nodeList[i];
        //    if (xmlEle.GetAttribute("genre") == "zhou")
        //    {
        //        //删除子节点
        //        rootElement.RemoveChild(nodeList[i]);
        //    }
        //}
        #endregion
        #region 删除节点的正确方法
        //声明集合来保存要删除的子节点
        List<XmlNode> delNodes = new List<XmlNode>();

        //遍历子节点
        foreach (XmlNode node in nodeList)
        {
            XmlElement xmlEle = (XmlElement)node;
            if (xmlEle.GetAttribute("genre") == "zhou")
            {
                //删除子节点
                delNodes.Add(node);
            }
        }

        //删除子节点
        foreach (XmlNode node in delNodes)
        {
            rootElement.RemoveChild(node);
        }
        #endregion

        //保存更改
        xmlDoc.Save(path + "//BookStore.xml");
    }

原创粉丝点击