Namespace
- using System;
- using System.Linq;
- using System.Xml.Linq
Building Model
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>
<project name="Melphi.XmlServices" frame=".NET Standard 2.0" language="C#" output=".dll">
<createdate>2020-01-11 16:20:31</createdate>
</project>
</melproj>