2009-07-14 5 views
8

私は、次のプロパティを持つクラスていますのXElementとリスト<T>

public class Author { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

次に、私はそうのような著者のリストを持っている:

List<Author> authors = new List<Author>(); 

authors.add(
    new Author { 
    FirstName = "Steven", 
    LastName = "King" 
    }); 

authors.add(
    new Author { 
    FirstName = "Homer", 
    LastName = "" 
    }); 

、私はLINQのを使用しようとしていますMy Authors Listを表すXMLを生成するためにXMLに変換します。

new XElement("Authors", 
    new XElement("Author", 
    from na in this.Authors 
    select new XElement("First", na.First))) 

上記のブロックは、期待どおりにXMLを生成しません。私は何を取得することです:

<Authors> 
    <Author> 
    <First>Steven</First> 
    <First>Homer</First> 
    </Author> 
<Authors> 

私はXML出力が見えるようにしたいどのようなものです:

<Authors> 
    <Author> 
    <First>Steven</First> 
    <Last>King</Last> 
    </Author> 
    <Author> 
    <First>Homer</First> 
    <Last></Last> 
    </Author> 
</Authors> 

私はそれがする必要があるように見えるためにXMLを取得する方法上の任意のヘルプは非常にいただければ幸いです!

答えて

11

あなたはそうのように、二番目のパラメータではなく、「著者」の文字列としてIEnumerable<XElement>クエリを渡す必要があります:

// Note the new way to initialize collections in C# 3.0. 
List<Author> authors = new List<Author>() 
{ 
    new Author { FirstName = "Steven", LastName = "King" }), 
    new Author { FirstName = "Homer", LastName = "" }) 
}; 

// The XML 
XElement xml = new XElement("Authors", 
    from na in this.Authors 
    select new XElement("Author", 
     new XElement("First", na.FirstName), 
     new XElement("Last", na.LastName))); 

あなたが必要結果を与えること。

2

私はあなたがC#を使っていることを知っていますが、これはあなたのソリューションにVB.NETプロジェクトを追加することを真剣に考えなければならないときです。 XMLリテラルはこれに最適であり、ずっと簡単です。

あなたの著者リストからXMLを取得するには、あなたがこれを行うだろう:

Function GetAuthorsXML(authors As List(Of Author)) As XElement 
    Return <Authors> 
       <%= from a in authors _ 
        select <Author> 
           <First><%= a.FirstName %></First> 
           <Last><%= a.LastName %></Last> 
          </Author> %> 
      </Authors> 
End Function 
+1

は*ちょうどXMLの魔法の少しのための*完全に独立したプロジェクトは、最高の状態で、過剰である持ちます。膨大な量のXML変換が必要な場合(複雑な性質の場合)、別のアセンブリを追加する場合(別のPITAであるモジュールをコンパイルして別のPITAを組み立てたい場合を除きます)いくつかの分野で – casperOne

+1

もちろん、これが唯一のビットであれば、それは過剰です。しかし、C#開発者にとってこれが.NETに存在することを知ることはまだ価値があります。そして私はいくつかの小さなプロジェクトを持っていなかったシステムでは一度も働いたことがないので、XML魔法を扱うために1つ追加することは意味をなさない。 – CoderDennis

関連する問題