2014-12-04 264 views
0

我有一個IList可以使用。從IList創建XML文件

我可以遍歷列表中的行並從中創建一個XML文件嗎?如果是的話,我會怎麼做呢?

我一直在試圖去掌握XDocument,但我沒有看到我可以通過使用這種方法循環IList。

+0

您可以創建一個字符串,列表值保存到變量字符串,並通過 – Haris 2014-12-04 11:35:04

+4

你將需要更加明確的節點呼叫負載功能循環。你有什麼清單?你的XML需要什麼樣子? – DoctorMick 2014-12-04 11:35:13

+0

你可以在這裏顯示你的清單容器嗎?當然,你的XDocument代碼結構? – Johnny 2014-12-04 11:35:54

回答

0

如果你只是從字符串列表一個相當簡單的結構之後是那麼這將工作:

var list = new List<string> { "Joe", "Jim", "John" }; 

var document = new XDocument(); 
var root = new XElement("Root"); 
document.Add(root); 
list.ForEach(x => root.Add(new XElement("Name", x))); 
+0

我的列表是IList,IList不喜歡.ForEach - 你能提供建議嗎? – 2014-12-04 12:34:52

+0

使用。選擇與@Alex Joukovsky提供的解決方案一樣。 – DoctorMick 2014-12-04 12:38:11

+0

同樣的問題 - IList不包含select的定義,感謝您的幫助! – 2014-12-04 12:42:56

1

如果你想KISS,添加System.Xml.Serialization到你項目的參考和:

using System; 
using System.Collections.Generic; 
using System.Xml.Serialization; 

public class Program { 
    static void Main() { 
     List<string> Data=new List<string> { "A","B","C","D","E" }; 

     XmlSerializer XMLs=new XmlSerializer(Data.GetType()); 
     XMLs.Serialize(Console.Out,Data); 

     Console.ReadKey(true); 
    } 
} 

我使用Console.Out爲您提供了一個快速的一行代碼示例,但您可以選擇任何Stream,這很可能是要寫入的文件。

1

在兩行:

IList<string> list = new List<string> {"A", "B", "C"}; 
var doc = new XDocument(new XElement("Root", list.Select(x => new XElement("Child", x)))); 

不要忘記usings:

using System.Collections.Generic; 
using System.Linq; 
using System.Xml.Linq; 

如果原始IList是一個非通用IList,您將需要包括對Enumerable.Cast<T>()一個調用,這樣Select()可以工作。例如: -

IList list = new List<string> {"A", "B", "C"}; 
var doc = new XDocument(new XElement("Root", 
    list.Cast<string>().Select(x => new XElement("Child", x)))); 
+0

我的列表是IList,IList不喜歡。選擇 - 你能提供建議嗎? – 2014-12-04 12:54:31

+0

@MatthewHarris見編輯。 – 2014-12-04 12:56:32

+0

我正在使用所有這些,仍然存在相同的問題 – 2014-12-04 13:43:01