LINQ for XML,在读取出现次数不同的多个元素时遇到问题



假设我下面有以下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());

最新更新