8

次のプロパティを持つクラスがあります。

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 = ""
  });

現在、作成者リストを表す XML を生成するために、Linq to 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 を必要に応じて表示する方法についてのヘルプは、非常に高く評価されます!

4

2 に答える 2

11

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

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

これにより、必要な結果が得られます。

于 2009-07-14T19:12:08.680 に答える
2

C# を使用していることは承知していますが、これは、ソリューションに VB.NET プロジェクトを追加することを真剣に検討する必要があるときの 1 つです。XML リテラルはこれに最適で、はるかに簡単になります。

Author リストから 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
于 2009-07-14T19:22:37.143 に答える