C#使用LINQ将CSV转换为XML

时间:2009-12-16 09:54:47

标签: c# asp.net xml linq

任务是将CSV文件转换为XML。

var x = from line in File.ReadAllLines(@"d:\sample.txt")
        where !line.StartsWith("#") && line.Length>0
        let parts=line.Split(',')
       select new
       {
         XmlFile= new XElement("root",
                                new XElement("ISBN",parts[0]),
                                new XElement("Title",parts[1])
                               )

       };

问题

1)如何处理流(使用LINQ语句)。

2)如何将选择保存到“sample.xml”文件中?

3)如何将Xml文件绑定到GridView?(我需要使用XmlDataSource吗?)。

4)使用Linq可以为我的XML创建XSD吗? (不使用XSD.exe)。

2 个答案:

答案 0 :(得分:2)

1)File.ReadAllLines执行File.Close,因此您不应该遇到流问题。

2)你需要将你的Linq查询放在你的XElement声明中,这样就可以得到一个XElement,而不是IEEumerable的XElement(见下文)

3& 4其他人可以回答...;)

(警告,未经测试的代码)

var xmlFile = new XElement("root", 
        from line in File.ReadAllLines(@"d:\sample.txt")
        where !line.StartsWith("#") && line.Length>0
        let parts=line.Split(',')
        select new XElement("book",
                            new XElement("ISBN",parts[0]),
                            new XElement("Title",parts[1])
                           )
        );

答案 1 :(得分:0)

1)我认为你不需要明确处理流。你有没有发现泄漏? 2)不是使用XMLFile属性创建(anon类型的)对象,而是整理XML元素列表

...
select new XElement("root",
                                new XElement("ISBN",parts[0]),
                                new XElement("Title",parts[1])
                               )

现在,您可以以编程方式创建XmlDocument或父XElement,将列表添加为子元素,并使用上述XML类的成员函数将其保存到文件中。

3)数据绑定:寻找XmlDataProvider MSDN Docs 4)XSD也是XML。所以没有理由你不能以编程方式生成它..虽然我从未尝试过它。除非你正在考虑从你在Step2中创建的xml文件中自动生成模式..在这种情况下我不知道答案..不确定是否有任何工具可以从有效的实现生成正确的格式规范规范。