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 == 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 == NotepadNumber);
xd2.Element("Title").Value = title;
xd2.Element("Content").Value = 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;
}