如何使用linq将字符串列表<t>转换为XML

时间:2015-10-13 14:37:33

标签: c# linq linq-to-xml

我正在尝试获取将数据转换为XML的链接。 我几乎工作的LINQ表达式是:

XElement xml = new XElement("contacts",
lstEmailData.Select(i => new XElement("Data",
                            new XAttribute("URL", i.WebPage ),
                                new XAttribute("emails", i.Emails.ToArray()  + " , ")
)));

其中lstEmailData定义为:

List<PageEmail> lstEmailData = new List<PageEmail>();
lstEmailData.Add(new PageEmail("site2", new List<string>() {
    "MyHotMail@NyTimes.com", "contact_us@ml.com" }));

PageEmail是:

class PageEmail
{
    public string WebPage { get; set; }
    public List<string> Emails { get; set; }
    public PageEmail(string CurWebPage, List<string> CurEmails)
    {
        this.WebPage = CurWebPage;
        this.Emails = CurEmails;
    }
}

LINQ的XML输出已关闭,我没有收到电子邮件列表:

<contacts>
  <Data URL="site1" emails="System.String[] , " />
  <Data URL="site2" emails="System.String[] , " />
</contacts>
  

如何将每个i.Emails放入自己的xml节点?

2 个答案:

答案 0 :(得分:4)

我猜你试图将所有电子邮件存储在emails属性中。 使用String.Join: -

new XAttribute("emails", String.Join(",", i.Emails)

答案 1 :(得分:2)

将对象作为第二个参数传递给XAttribute构造函数时。它会调用ToString方法。在数组上调用ToString的结果是数组的名称(所以你得到System.String[])要显示其中的字符串,你应该使用String.Join代替。

XElement xml = new XElement("contacts",
lstEmailData.Select(i => new XElement("Data",
                            new XAttribute("URL", i.WebPage ),
                                new XAttribute("emails", String.Join(",", i.Emails))
)));
  

如何将每个i.Emails放入自己的xml节点?   试试这个:

XElement xml = new XElement("contacts",
    lstEmailData.Select(pageEmail =>
        new XElement("Data", new XAttribute("Url",pageEmail.WebPage), 
            pageEmail.Emails.Select(email => new XElement("Email",email))
        )
    )
);

结果:

<contacts>
  <Data Url="site2">
    <Email>MyHotMail@NyTimes.com</Email>
    <Email>contact_us@ml.com</Email>
  </Data>
</contacts>