我有具有以下性质的类:

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到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任何帮助寻找,因为我需要它会极大地感激!

有帮助吗?

解决方案

您需要通过 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)));

这会给你你需要的结果。

其他提示

我知道你正在使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top