2015-10-16 59 views
0

我試圖建立一個XML文檔應輸出的列表相同級別爲每個對象創建一對的XElement的,對列表中的每個對象List<Journey> journeysJourney使用LINQ to XML來對對象

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

我試圖使用LINQ到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在List的同一級別上創建一對XElement

+0

您的XML的結構不清楚。我假設「根」被稱爲「旅程」,並且它具有「旅程」元素。您的XML示例將'Journeys'列爲元素,而C#代碼包含兩個版本。請修改示例,以便我們可以更好地瞭解您要實現的目標。 –

回答

2

可以項目中的每個Journey爲兩個元件的陣列,然後壓平成一個單一的列表與SelectMany

var journeyElement = new XElement("Journeys", 
    journeys.SelectMany(j => new[] { new XElement("id", j.id), new XElement("length", j.length) })); 

這產生所需的XML:

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

工程就像一個魅力。非常感謝你。 – WizLiz

-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) 
            ) 
           ) 
          );