Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ for XML,在读取不同事件的多个元素时遇到问题_C#_.net_Xml_Linq - Fatal编程技术网

C# LINQ for 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

假设我有下面的XML文件。我的问题是,在使用LINQ进行查询时,如何考虑不同数量的名称元素(环境元素的子元素)。当有相同数量的name元素(例如,它们都有3个)时,我可以读取文件,甚至可以进行查询。我的目标是用XML文件中的名称填充具有列表缩放环境的对象。任何帮助都将不胜感激

     <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());