C# LINQ for XML,在读取不同事件的多个元素时遇到问题
假设我有下面的XML文件。我的问题是,在使用LINQ进行查询时,如何考虑不同数量的名称元素(环境元素的子元素)。当有相同数量的name元素(例如,它们都有3个)时,我可以读取文件,甚至可以进行查询。我的目标是用XML文件中的名称填充具有列表缩放环境的对象。任何帮助都将不胜感激C# LINQ for XML,在读取不同事件的多个元素时遇到问题,c#,.net,xml,linq,C#,.net,Xml,Linq,假设我有下面的XML文件。我的问题是,在使用LINQ进行查询时,如何考虑不同数量的名称元素(环境元素的子元素)。当有相同数量的name元素(例如,它们都有3个)时,我可以读取文件,甚至可以进行查询。我的目标是用XML文件中的名称填充具有列表缩放环境的对象。任何帮助都将不胜感激 <database type="prod"> <name>DB1</name> <server> <name>prods
<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>
它工作正常,但当我再添加一个classes元素时,它会中断:
<student name="A" class="1">
<classes>
Math
</classes>
<classes>
Java
</classes>
</student>
<student name="B" class="2">
<classes>
Programming
</classes>
</student>
数学
JAVA
程序设计
你的意思还不太清楚。。。假设(比如)您有一个环境
类型,其构造函数接受列表
作为名称,您将使用:
// If element is the <environment> element
Environment = new Environment(element.Elements("name")
.Select(x => x.Value)
.ToList());
//如果元素是元素
环境=新环境(element.Elements(“名称”)
.选择(x=>x.Value)
.ToList());
抱歉,我更新了这个问题,因为它有点模糊,我添加了一个更简单的示例…@PaulDimech:您当前正在调用Single()
,这表明您需要一个值-而您的类
属性类型只是一个值。你想在你的学生
代码中如何处理这个问题?从根本上说,你必须有一个支持多个值的模型……对不起,我试图画一个简单的例子,如果我有一个包含列表类的类,我想根据元素的数量填充它。上面的示例不太好,因为它有一个class属性和一个class元素,并且类型类型(同样是糟糕的选择)不是数组或列表。@pauldimetch:不要快速绘制示例。举出一个好例子。我已经向您展示了如何构造一个环境
对象,该对象需要一个列表
作为名称-您仔细看过该示例了吗?听起来它确实能满足你的需要……嗨,乔恩,谢谢,非常感谢,它工作得很好。为这个糟糕的例子感到抱歉,并跟进这个糟糕的例子,我会确保解释得更多,并保持它的简单和完整。我添加了以下操作:Type=x.Elements(“classes”).Select(y=>y.Value).ToList()
<student name="A" class="1">
<classes>
Math
</classes>
<classes>
Java
</classes>
</student>
<student name="B" class="2">
<classes>
Programming
</classes>
</student>
// If element is the <environment> element
Environment = new Environment(element.Elements("name")
.Select(x => x.Value)
.ToList());