![](/img/trans.png)
[英]How to import XML file with varying number of nodes and child nodes into DataTable in C#?
[英]C# Create XML with unlimited child nodes based on number property
我的项目中有以下 C# class :
public class Department
{
public string Name { get; set; }
public string Number{ get; set; }
public List<Department> SubDepartments{ get; set; }
}
一个部门可以有自己的子部门的子部门。 Number
属性决定了父子关系,没有深度限制。
我有一个包含只有Name
和Number
而没有SubDepartments
的部门集合的提要。 根据Number
属性为子部门创建带有子节点的 XML 文件的最佳方法是什么?
例子:
<MainDepartment name="IT" number="1">
<SubDepartment name="Software engineering" number="1.1" >
<SubDepartment name="Quality assurance" number="1.1.1">
...
</SubDepartment>
<SubDepartment name="Development" number="1.1.2" />
</SubDepartment>
<SubDepartment name="Support" number="1.2" />
<SubDepartment name="Administration" number="1.3" />
</MainDepartment>
<MainDepartment name="Finance" number="2" >
<SubDepartment name="Accounting" number="2.1">
...
</SubDepartment>
</MainDepartment>
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
List<Department> departments = new List<Department>() {
new Department() { Name = "IT", Number = "1", SubDepartments = new List<Department>() {
new Department() { Name = "Software engineering", Number = "1.1", SubDepartments = new List<Department>() {
new Department() { Name = "Quality assurnace", Number = "1.1.1"},
new Department() { Name = "Development", Number = "1.1.2"}
}},
new Department() { Name = "Support", Number = "1.2"},
new Department() { Name = "Administration", Number = "1.3"}
}},
new Department() { Name = "Finance", Number = "2", SubDepartments = new List<Department>() {
new Department() { Name = "Accounting", Number = "2.1"}
}}
};
string header = "<Company></Company>";
XDocument doc = XDocument.Parse(header);
XElement company = doc.Root;
int level = 1;
CreateXml(departments, company, level);
doc.Save(FILENAME);
}
static void CreateXml(List<Department> parentDept, XElement parentXml, int level)
{
foreach (Department department in parentDept)
{
XElement newDept;
if (level == 1)
{
newDept = new XElement("MainDepartment");
}
else
{
newDept = new XElement("SubDepartment");
}
parentXml.Add(newDept);
newDept.Add(new XAttribute("name", department.Name));
newDept.Add(new XAttribute("number", department.Number));
if (department.SubDepartments != null)
{
CreateXml(department.SubDepartments, newDept, level + 1);
}
}
}
}
public class Department
{
public string Name { get; set; }
public string Number { get; set; }
public List<Department> SubDepartments { get; set; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.