1

私は次のようなXMLドキュメントを持っています:

<people>
  <person>
    <name>mike</name>
    <address>1 main st</address>
    <jobTitle>SE</jobTitme>
       <children>
           <name>mary</name>
           <age>5</age>
       </childres> 
  </person>
  <person>
    <name>john</name>
    <address>2 main st</address>
    <jobTitle>SE</jobTitme>
  </person>
</people>`

したがって、すべての人がブロックし、子供がブロックするわけではありません。ものすごく単純。C#を介してXMLに新しい人物を追加するとき、人物オブジェクトを取得する関数を記述しており、その人物オブジェクトには子オブジェクトのコレクション(0以上の場合があります)があります。その関数でlinqを書くのに問題があります。人物オブジェクトは簡単に追加できますが、条件付きで1人以上の子を追加するのは困難です。これが私がこれまでに持っているものです:

    doc.Element("People").Add(
            new XElement("Person", 
                new XElement("Name", person.name),
                new XElement("Address", person.address),
                new XElement("jobTitle", person.jobTitle)))

子供が存在する場合、条件付きで追加するにはどうすればよいですか?

public class person { public List<Child> childList; public string name; public string address; public string jobTitle }

public class child { public string name; public int age; }

4

1 に答える 1

3

子供が存在する場合、条件付きで追加するにはどうすればよいですか?

3つのオプション:

  • 呼び出しでnull引数を使用します。XElementそれは無視されます
  • 子の空のシーケンスを渡します。繰り返しますが、これは無関係になります
  • 要素の残りの部分を構築し、その後条件付きで呼び出しますAdd

あなたのPersonタイプのコードを見ずに、より具体的なアドバイスを与えるのは難しいです。

(余談childですが、子ごとに1つの要素があると仮定すると、要素は実際には子ではなく、あるはずです...)

編集:あなたのコードを見ることができるようになったので、あなたが望むように見えます:

doc.Element("People").Add(
        new XElement("Person", 
            new XElement("Name", person.name),
            new XElement("jobTitle", job.title),
            person.children.Select(c => new XElement("children",
                new XElement("Name", c.name),
                new XElement("Age", c.age)))));

要素名に関しては、現在、大文字と小文字の区別が非常に一貫していないことに注意してください。また、このようなパブリックフィールドを公開することはお勧めできません。

于 2012-08-16T15:44:19.827 に答える