2014-12-04 99 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