【问题标题】:how to use linq to convert list of string,<t> into XML如何使用 linq 将字符串列表 <t> 转换为 XML
【发布时间】:2015-10-13 14:37:32
【问题描述】:

我正在尝试获取将数据转换为 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.Email 进入它们自己的 xml 节点?

【问题讨论】:

  • 通过这篇文章想通了:blogs.msdn.com/b/wriju/archive/2008/02/18/…
  • XElement xml = new XElement("SiteData", lstEmailData.Select(i => new XElement("WebSite", new XAttribute("URL", i.WebPage), from o in i.Emails) select new XElement("mail", o.ToString() ) )));

标签: c# linq linq-to-xml


【解决方案1】:

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

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

【讨论】:

  • 如何将每封 i.email 放入自己的 xml 节点?
  • @kacalapy - 嘿错过了您的评论,我现在尝试了,但使用List&lt;string&gt; 我收到了&lt;email&gt;e1,e2,e3&lt;email&gt;,即所有电子邮件都用逗号分隔。你的问题解决了吗?
【解决方案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.Email 进入它们自己的 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>

【讨论】:

  • 如何将每封 i.email 放入自己的 xml 节点?
  • 我得到了基本的序列化工作,但只需要为对象的电子邮件列表获取一些递归样式操作,否则我可以获得电子邮件链接但丢失了站点 URL。答案是两个嵌套的 linq 语句吗?
  • 您希望结果如何?到目前为止,您尝试过什么?
  • 每个 i.Email 到他们自己的 xml 节点 m@m.coma@a。 com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多