自定义XML文件的读取
1、创建一个控制台项目,并创建一个XMLHelper.cs文件,并写入下面代码:
#region 实体
[Serializable]//表示该类可序列化
[XmlRoot(ElementName = "MyTest")]
public class MyTest
{
/// <summary>
/// company基本参数数组
/// </summary>
[XmlArray("CompanyConfig")]
public List<CompanyItem> CompanyConfig { get; set; }
/// <summary>
/// Employee基本参数数组
/// </summary>
[XmlArray("EmployeeConfig")]
public List<EmployeeItem> EmployeeConfig { get; set; }
}
[Serializable]
[XmlType(TypeName = "CompanyItem")]
public class CompanyItem
{
/// <summary>
/// 节点名
/// </summary>
[XmlAttribute(AttributeName = "name")]
public string name { get; set; }
/// <summary>
/// 公司名
/// </summary>
[XmlAttribute(AttributeName = "companyName")]
public string companyName { get; set; }
/// <summary>
/// 两个尖括号中的内容
/// </summary>
[XmlText]
public string innerText { get; set; }
}
[Serializable]
[XmlType(TypeName = "EmployeeItem")]
public class EmployeeItem
{
/// <summary>
/// 节点名称
/// </summary>
[XmlAttribute(AttributeName = "name")]
public string name { get; set; }
/// <summary>
/// 员工名
/// </summary>
[XmlAttribute(AttributeName = "empName")]
public string empName { get; set; }
/// <summary>
/// 城市名
/// </summary>
[XmlAttribute(AttributeName = "city")]
public string city { get; set; }
/// <summary>
/// 两个尖括号中间的内容
/// </summary>
[XmlText]
public string innerText { get; set; }
}
#endregion
2、创建一个test.xml文件,并在文件中填写下面的代码:
<?xml version="1.0" encoding="utf-8" ?>
<MyTest>
<CompanyConfig>
<CompanyItem name="公司表" companyName="公司名">测试的公司</CompanyItem>
</CompanyConfig>
<EmployeeConfig>
<EmployeeItem name="员工表" empName="员工名" city="城市名">测试的员工</EmployeeItem>
</EmployeeConfig>
</MyTest>
3、program.cs中的代码如下:
static void Main(string[] args)
{
//xml文件所在的路径
string ConfigPath = @"G:\MyProject\FileWatcherService\XMLTest\test.xml";
string xmlData = string.Empty;
using (StreamReader sr = new StreamReader(ConfigPath))
{
xmlData = sr.ReadToEnd();//读取xml文件
}
MyTest myTestConfig;
XmlSerializer xs = new XmlSerializer(typeof(MyTest));//序列化成实体Config
using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlData)))
{
myTestConfig = (MyTest)xs.Deserialize(stream);//反序列化成实体Config
}
if (myTestConfig != null)
{
//公司config的内容
foreach (var item in myTestConfig.CompanyConfig)
{
Console.WriteLine($"节点名:{item.name},公司名:{item.companyName},两个尖括号中间的值:{item.innerText}");
}
//员工config的内容
foreach (var item in myTestConfig.EmployeeConfig)
{
Console.WriteLine($"节点名:{item.name},员工名:{item.empName},城市名:{item.city},两个尖括号中间的值:{item.innerText}");
}
}
}
4、上面三步的代码执行后的结果如下图: