将字符串数组列表转换为 xml
convert List of string array into xml
我需要将数组列表转换为 xml。在列表中,第一个对象是 xml 的元素,从第二个对象开始,它是元素的值。
例如:
list[0]={"firstname","lastname","age","empid"}
list[1]={"john","maxwell","31","101"}
list[2]={"max","lee","45","102"}
现在使用上面的列表我需要创建一个 XML 文件,如上所述 list[0] 需要用作 XML 元素,list[1] 和 list[2] 是值对于那些元素。最终 XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<EmployeeRecords>
<Employee>
<firstname>john</firstname>
<lastname>maxwell</lastname>
<age>31</age>
<empid>101</empid>
</Employee>
<Employee>
<firstname>Max</firstname>
<lastname>lee</lastname>
<dob>45</dob>
<empid>102</empid>
</Employee>
</EmployeeRecords>
我试过使用 XELement
class 但我无法理解如何在其中动态传递元素名称。
XElement xmlout = new XElement("EmployeeRecords", list.Select(i => new XElement("Employee", i.Select(tag=>new XElement("Employee",tag)))));
我也尝试过使用 XmlDocument
动态创建元素,但它们也不起作用。请对此进行指导,因为我对 XML 文件格式非常陌生。
您要查找的内容称为XML 序列化。在以下位置有一个很好的介绍:https://docs.microsoft.com/en-us/dotnet/standard/serialization/introducing-xml-serialization
这是解决方案。请注意,Zip
方法有第二个参数,它允许您为元组字段名称实现更合适的名称,而不是 First
和 Second
.
代码
using System.Xml.Linq;
string[][] data =
{
new[] { "firstname", "lastname", "age", "empid" },
new[] { "john", "maxwell", "31", "101" },
new[] { "max", "lee", "45", "102" }
};
var xmlout = new XElement("EmployeeRecords",
data.Skip(1).Select(_ => new XElement("Employee",
// Zip joins two lists - names at data[0] and values, which are in _
data[0].Zip(_).Select(_=>new XElement(_.First, _.Second))
)))
.ToString();
Console.Write(xmlout);
输出
<EmployeeRecords>
<Employee>
<firstname>john</firstname>
<lastname>maxwell</lastname>
<age>31</age>
<empid>101</empid>
</Employee>
<Employee>
<firstname>max</firstname>
<lastname>lee</lastname>
<age>45</age>
<empid>102</empid>
</Employee>
</EmployeeRecords>
我需要将数组列表转换为 xml。在列表中,第一个对象是 xml 的元素,从第二个对象开始,它是元素的值。
例如:
list[0]={"firstname","lastname","age","empid"}
list[1]={"john","maxwell","31","101"}
list[2]={"max","lee","45","102"}
现在使用上面的列表我需要创建一个 XML 文件,如上所述 list[0] 需要用作 XML 元素,list[1] 和 list[2] 是值对于那些元素。最终 XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<EmployeeRecords>
<Employee>
<firstname>john</firstname>
<lastname>maxwell</lastname>
<age>31</age>
<empid>101</empid>
</Employee>
<Employee>
<firstname>Max</firstname>
<lastname>lee</lastname>
<dob>45</dob>
<empid>102</empid>
</Employee>
</EmployeeRecords>
我试过使用 XELement
class 但我无法理解如何在其中动态传递元素名称。
XElement xmlout = new XElement("EmployeeRecords", list.Select(i => new XElement("Employee", i.Select(tag=>new XElement("Employee",tag)))));
我也尝试过使用 XmlDocument
动态创建元素,但它们也不起作用。请对此进行指导,因为我对 XML 文件格式非常陌生。
您要查找的内容称为XML 序列化。在以下位置有一个很好的介绍:https://docs.microsoft.com/en-us/dotnet/standard/serialization/introducing-xml-serialization
这是解决方案。请注意,Zip
方法有第二个参数,它允许您为元组字段名称实现更合适的名称,而不是 First
和 Second
.
代码
using System.Xml.Linq;
string[][] data =
{
new[] { "firstname", "lastname", "age", "empid" },
new[] { "john", "maxwell", "31", "101" },
new[] { "max", "lee", "45", "102" }
};
var xmlout = new XElement("EmployeeRecords",
data.Skip(1).Select(_ => new XElement("Employee",
// Zip joins two lists - names at data[0] and values, which are in _
data[0].Zip(_).Select(_=>new XElement(_.First, _.Second))
)))
.ToString();
Console.Write(xmlout);
输出
<EmployeeRecords>
<Employee>
<firstname>john</firstname>
<lastname>maxwell</lastname>
<age>31</age>
<empid>101</empid>
</Employee>
<Employee>
<firstname>max</firstname>
<lastname>lee</lastname>
<age>45</age>
<empid>102</empid>
</Employee>
</EmployeeRecords>