首页 > 代码库 > LINQ to XML

LINQ to XML

  LINQ to XML可以两种方式和XML配合使用。第一种方式是作为简化的XML操作API,第二种方式是使用LINQ查询工具。下面我使用的是第一种方式。

  主要内容:用LINQ查询语句对XML文件进行增删改查。

  此方法优点:

    1.我们可以使用单一语句自顶向下创建XML树。

    2.我们可以使用包含树的XML文档在内存中创建并操作XML。

    3.我们可以不适用Text子节点来创建和操作字符串节点。

    4.一个最大的不同(改进)是,在搜索一个XML树时,不需要遍历它。相反只需要查询树并让它返回想要的结果。

  这里我以一个记事本为例:记事本的内容包括,Id(编号),Title(标题),Content(内容)。

  下面是有关代码:

      /// <summary>
        /// 创建XmlDocument并实例化
        /// </summary>
        XDocument xml = XDocument.Load(xmlPath);

  

     /// <summary>
        /// Xml文件路径
        /// </summary>
        const string xmlPath =@"..\..\..\DAL\Notepad\NotepadXML\Notepad.xml";

  

  /// <summary>
        /// 添加记事本
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="content">内容</param>
        /// <returns>true:成功;false:失败</returns>
        public bool addNotepad(string number,string title, string content)
        {
            try
            {
                XElement xd = xml.Root;
                XElement xm = new XElement(new XElement("Notepad",
                    new XElement("Id", number),
                    new XElement("Title", title),
                    new XElement("Content", content)));
                xd.Add(xm);
                xml.Save(xmlPath);
            }
            catch
            {
                return false;
            }
            return true;
        }
        #endregion

 

  /// <summary>
        /// 删除一个记事本
        /// </summary>
        /// <param name="NotepadNumber">记事本编号</param>
        /// <returns>true:成功;false:失败</returns>
        public bool delectTheNotepad(string NotepadNumber)
        {
            try
            {
                XElement xd = xml.Root;
                xd.Elements().First(n => n.Element("Id").Value =http://www.mamicode.com/= NotepadNumber).Remove();
                xd.Save(xmlPath);
            }
            catch
            {
                return false;
            }
            return true;
        }

 

   /// <summary>
        /// 修改记事本
        /// </summary>
        /// <param name="NotepadNumber">记事本编号id</param>
        /// <param name="title">标题</param>
        /// <param name="content">内容</param>
        /// <returns>true:成功;false:失败</returns>
        public bool updateNotepad(string NotepadNumber, string title, string content)
        {
            try
            {
                XElement xd = xml.Root;
                XElement xd2 = xd.Elements().First(n => n.Element("Id").Value =http://www.mamicode.com/= NotepadNumber);
                xd2.Element("Title").Value = http://www.mamicode.com/title;
                xd2.Element("Content").Value = http://www.mamicode.com/content;
                xd.Save(xmlPath);
            }
            catch
            {
                return false;
            }
            return true;
        }

 

   /// <summary>
        /// 获取一个文件里的所有记事本
        /// </summary>
        /// <returns>一个文件里的所有记事本</returns>
        public List<string[]> getAllNotepadInFile()
        {
            List<string[]> list = new List<string[]>();
            XElement xd = xml.Root;
            foreach (XElement item in xd.Elements())
            {
                list.Add(new string[]{
                    item.Element("Id").Value,
                    item.Element("Title").Value,
                    item.Element("Content").Value
                });
            }
            return list;
        }

LINQ to XML