using System;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
/// <summary>
/// 用戶
/// </summary>
public class User
{
public string Name { get; set; }
public string Authority { get; set; }
public string key { get; set; }
}
/// <summary>
/// 項目
/// </summary>
public class Project
{
public User User { get; set; }
public string Name { get; set; }
public string Frame { get; set; }
public string Language { get; set; }
public string Output { get; set; }
public string CreateDate { get; set; }
}
}
Create XML File
using System;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
public class XmlService
{
/// <summary>
/// 創建XML文件
/// </summary>
/// <param name="path">創建文本路徑</param>
public static void CreateXmlFile(string path)
{
XDocument xDocument = new XDocument();
// 創建根節點
XElement xRoot = new XElement("melproj");
// 創建節點的子節點
XElement xeUser = new XElement(
new XElement("user",
new XElement("name", "Melphily"),
new XElement("authority", "0"),
new XElement("key", "DFASC-FRPDS-OOPAD-MJHWD-PLODDE"))
);
// 創建節點的子節點和節點屬性
XElement xeProject = new XElement(
new XElement("project",
new XAttribute("name", "Melphi.XmlServices"),
new XAttribute("frame", ".NET Standard 2.0"),
new XAttribute("language", "C#"),
new XAttribute("output", ".dll"),
new XElement("createdate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")))
);
// 將節點添加到根節點上
xRoot.Add(xeUser);
xRoot.Add(xeProject);
xDocument.Add(xRoot);
// 保存XML文件
xDocument.Save(System.IO.Path.Combine(path, @"melproj.xml"));
}
}
}
Read XML File
using System;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
public class XmlService
{
/// <summary>
/// 獲取XML文件信息
/// </summary>
/// <param name="path">路徑</param>
/// <returns>返回 <see cref="Project" /> 類型的數據模型</returns>
public static Project ReadXmlFile(string path)
{
Project result = new Project();
// 加載XML文件
XElement xElement = XElement.Load(System.IO.Path.Combine(path, @"melproj.xml"));
result.User = new User();
// 獲取某個節點的子節點
foreach (var item in xElement.Element("user").Elements())
{
switch (item.Name.ToString())
{
case "name":
result.User.Name = item.Value.ToString();
break;
case "authority":
result.User.Authority = item.Value.ToString();
break;
case "key":
result.User.key = item.Value.ToString();
break;
default:
break;
}
}
// 獲取某個節點的子節點
foreach (var item in xElement.Element("project").Elements())
{
switch (item.Name.ToString())
{
case "createdate":
result.CreateDate = item.Value.ToString();
break;
default:
break;
}
}
// 獲取某個節點的屬性
foreach (var item in xElement.Element("project").Attributes())
{
switch (item.Name.ToString())
{
case "name":
result.Name = item.Value.ToString();
break;
case "frame":
result.Frame = item.Value.ToString();
break;
case "language":
result.Language= item.Value.ToString();
break;
case "output":
result.Output= item.Value.ToString();
break;
default:
break;
}
}
return result;
}
}
}
Modify XML File
using System;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
public class XmlService
{
/// <summary>
/// 修改XML文件節點或者屬性的內容
/// </summary>
/// <param name="path">路徑</param>
/// <param name="projectName">修改的值</param>
public static void ModifyXMLFile(string path, string projectName)
{
XElement xe = XElement.Load(System.IO.Path.Combine(path, @"melproj.xml"));
// 修改某個屬性屬性
xe.Element("project").Attribute("name").SetValue(projectName);
// 修改某個節點內容
xe.Element("user").Element("name").SetValue("John");
// 保存修改文件
xe.Save(System.IO.Path.Combine(path, @"melproj.xml"));
}
}
}
Add A Node To XML File
using System;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
public class XmlService
{
/// <summary>
/// 添加新節點到XML文件中
/// </summary>
/// <param name="path">路徑</param>
public static void AddXmlNodeToFile(string path)
{
XElement xe = XElement.Load(System.IO.Path.Combine(path, @"melproj.xml"));
// 添加的節點
XElement adddingItem = new XElement(new XElement("content", new XElement("cs", "3"), new XElement("xaml", "2")));
// 添加到根節點
xe.Add(adddingItem);
// 保存修改文件
xe.Save(System.IO.Path.Combine(path, @"melproj.xml"));
}
}
}
Delete A Node From XML File
using System;
using System.Linq;
using System.Xml.Linq;
namespace Melphi.XmlServices
{
public class XmlService
{
/// <summary>
/// 刪除某個節點
/// </summary>
/// <param name="path">路徑</param>
public static void DeleteANodeFromFile(string path)
{
XElement xe = XElement.Load(System.IO.Path.Combine(path, @"melproj.xml"));
// 當 xaml = 2 時,刪除 content 節點所有內容
var xElements = from ele in xe.Elements("content") where (string)ele.Element("xaml") == "2" select ele;
// 如果存在以上條件的 content 節點
if (xElements.Count() > 0)
{
// 刪除這個節點
xElements.First().Remove();
}
// 保存修改文件
xe.Save(System.IO.Path.Combine(path, @"melproj.xml"));
}
}
}
XML File View
<?xml version="1.0" encoding="utf-8"?><melproj><user><name>Melphily</name><authority>0</authority><key>DFASC-FRPDS-OOPAD-MJHWD-PLODDE</key></user><projectname="Melphi.XmlServices"frame=".NET Standard 2.0"language="C#"output=".dll"><createdate>2020-01-11 16:20:31</createdate></project></melproj>