假设我下面有以下XML文件。 我的问题是,在使用 LINQ 查询时,如何考虑不同数量的名称元素(环境元素的子元素)。 我可以读取文件,甚至可以在有相同数量的名称元素时进行查询(例如,它们都有 3 个)。 我的目标是使用 XML 文件中的名称填充具有列表 caled 环境的对象。 任何帮助将不胜感激。
<database type="prod">
<name>DB1</name>
<server>
<name>prodserver.net</name>
</server>
<connection>
<name>u1</name>
<password>b1</password>
</connection>
<environment>
<name>test1</name>
<name>test2</name>
<name>test3</name>
</environment>
</database>
<database type="dev">
<name>DB2</name>
<server>
<name>devserver.net</name>
</server>
<connection>
<name>u11</name>
<password>b11</password>
</connection>
<environment>
<name>test1</name>
<name>test2</name>
<name>test3</name>
<name>test4</name>
<name>test5</name>
</environment>
</database>
或者也许为了让它更容易,假设我有以下内容
<student name="A" class="1">
<classes>
Math
</classes>
</student>
<student name="B" class="2">
<classes>
Programming
</classes>
</student>
我运行以下代码:
var students = doc.Root
.Elements("student")
.Select(x => new Student
{
Name = (string)x.Attribute("name"),
Class = (string)x.Attribute("class"),
Type = (string)x.Elements("classes").Single().Value
})
.ToList();
它工作正常,但是当我再添加一个类元素时,它会中断:
<student name="A" class="1">
<classes>
Math
</classes>
<classes>
Java
</classes>
</student>
<student name="B" class="2">
<classes>
Programming
</classes>
</student>
不太清楚你的意思...假设您有一个 Environment
类型,其构造函数接受List<string>
作为名称,您将使用:
// If element is the <environment> element
Environment = new Environment(element.Elements("name")
.Select(x => x.Value)
.ToList());