使用LINQ to XML在对象列表中的每个对象的同一级别上创建一对XElement

时间:2015-10-16 09:44:59

标签: c# xml linq

我正在尝试为列表Journey中的每个对象List<Journey> journeys构建一个应输出的XML文档:

<Journeys>
    <id>1</id>
    <length>28</length>
    <id>2</id>
    <length>44</length>
    etc.
</Journeys>

我尝试使用以下代码使用LINQ to XML:

var journeyElement = new XElement("Journeys",
    journeys.Select(j => 
        new XElement("id", j.id),
        new XElement("length", j.length));

这显然不是预期的语法。

var journeyElement = new XElement("Journey",
    journeys.Select(j => new
    {
        id = new XElement("id", j.id),
        length = new XElement("length", j.length)
    }));

哪个没有产生预期的结果。

如何使用LINQ to XML从XElement在同一级别上创建一对List

2 个答案:

答案 0 :(得分:2)

您可以将每个var journeyElement = new XElement("Journeys", journeys.SelectMany(j => new[] { new XElement("id", j.id), new XElement("length", j.length) })); 投影到两个元素的数组中,然后将它们展平为一个包含SelectMany的列表:

<Journeys>
  <id>1</id>
  <length>28</length>
  <id>2</id>
  <length>44</length>
</Journeys>

这会生成所需的XML:

struct

答案 1 :(得分:-1)

如果您可以像这样更改XML结构,

<Journeys>
    <Journey>
        <id>1</id>
        <length>28</length>
    </Journey>
    <Journey>
        <id>2</id>
        <length>44</length>
    </Journey>
    etc.
</Journeys>

此代码可以使用。

List<Journey> journeys;

var journeyElement = new XElement("Journeys",
                            journeys.Select(j =>
                                new XElement("Journey",
                                    new XElement("id", j.id),
                                    new XElement("length", j.length)
                                    )
                                )
                            );