题
我有具有以下性质的类:
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
不隶属于 StackOverflow