1

以下のXMLファイルがあるとしましょう。私の質問は、LINQを使用してクエリを実行するときに、異なる数の名前要素(環境要素の子)をどのように考慮するかです。同じ数の名前要素がある場合(たとえば、すべて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>

または、もっと簡単にするために、次のようなものがあるとしましょう

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

正常に動作しますが、classes要素をもう1つ追加すると、次のように機能しなくなります。

  <student name="A" class="1">
<classes>
  Math
</classes>
<classes>
  Java
</classes>
</student>  
<student name="B" class="2">
  <classes>
    Programming
  </classes>
</student>
4

1 に答える 1

0

あなたが何を意味するのかは本当に明確ではありません...あなたが(例えば)名前としてEnvironmentaを受け入れるコンストラクターを持つタイプを持っていると仮定するList<string>と、あなたは以下を使うでしょう:

// If element is the <environment> element
Environment = new Environment(element.Elements("name")
                                     .Select(x => x.Value)
                                     .ToList());
于 2012-11-15T22:07:47.020 に答える