LINQ 从 CSV 文件生成 XML

本文参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx

下面的代码对字符串数组执行 LINQ 查询。
在 C# 版本中,该查询使用 let 子句将每个字符串分隔成字段数组。
C#VB
// Create the text file.
string csvString = @"GREAL,Great Lakes Food Market,Howard Snyder,Marketing Manager,(503) 555-7555,2732 Baker Blvd.,Eugene,OR,97403,USA
HUNGC,Hungry Coyote Import Store,Yoshi Latimer,Sales Representative,(503) 555-6874,City Center Plaza 516 Main St.,Elgin,OR,97827,USA
LAZYK,Lazy K Kountry Store,John Steel,Marketing Manager,(509) 555-7969,12 Orchestra Terrace,Walla Walla,WA,99362,USA
LETSS,Let's Stop N Shop,Jaime Yorres,Owner,(415) 555-5938,87 Polk St. Suite 5,San Francisco,CA,94117,USA";
File.WriteAllText("cust.csv", csvString);

// Read into an array of strings.
string[] source = File.ReadAllLines("cust.csv");
XElement cust = new XElement("Root",
    from str in source
    let fields = str.Split(',')
    select new XElement("Customer",
        new XAttribute("CustomerID", fields[0]),
        new XElement("CompanyName", fields[1]),
        new XElement("ContactName", fields[2]),
        new XElement("ContactTitle", fields[3]),
        new XElement("Phone", fields[4]),
        new XElement("FullAddress",
            new XElement("Address", fields[5]),
            new XElement("City", fields[6]),
            new XElement("Region", fields[7]),
            new XElement("PostalCode", fields[8]),
            new XElement("Country", fields[9])
        )
    )
);
Console.WriteLine(cust);
这段代码产生以下输出:
XML
<Root>
  <Customer CustomerID="GREAL">
    <CompanyName>Great Lakes Food Market</CompanyName>
    <ContactName>Howard Snyder</ContactName>
    <ContactTitle>Marketing Manager</ContactTitle>
    <Phone>(503) 555-7555</Phone>
    <FullAddress>
      <Address>2732 Baker Blvd.</Address>
      <City>Eugene</City>
      <Region>OR</Region>
      <PostalCode>97403</PostalCode>
      <Country>USA</Country>
    </FullAddress>
  </Customer>
  <Customer CustomerID="HUNGC">
    <CompanyName>Hungry Coyote Import Store</CompanyName>
    <ContactName>Yoshi Latimer</ContactName>
    <ContactTitle>Sales Representative</ContactTitle>
    <Phone>(503) 555-6874</Phone>
    <FullAddress>
      <Address>City Center Plaza 516 Main St.</Address>
      <City>Elgin</City>
      <Region>OR</Region>
      <PostalCode>97827</PostalCode>
      <Country>USA</Country>
    </FullAddress>
  </Customer>
  <Customer CustomerID="LAZYK">
    <CompanyName>Lazy K Kountry Store</CompanyName>
    <ContactName>John Steel</ContactName>
    <ContactTitle>Marketing Manager</ContactTitle>
    <Phone>(509) 555-7969</Phone>
    <FullAddress>
      <Address>12 Orchestra Terrace</Address>
      <City>Walla Walla</City>
      <Region>WA</Region>
      <PostalCode>99362</PostalCode>
      <Country>USA</Country>
    </FullAddress>
  </Customer>
  <Customer CustomerID="LETSS">
    <CompanyName>Let's Stop N Shop</CompanyName>
    <ContactName>Jaime Yorres</ContactName>
    <ContactTitle>Owner</ContactTitle>
    <Phone>(415) 555-5938</Phone>
    <FullAddress>
      <Address>87 Polk St. Suite 5</Address>
      <City>San Francisco</City>
      <Region>CA</Region>
      <PostalCode>94117</PostalCode>
      <Country>USA</Country>
    </FullAddress>
  </Customer>
</Root>

  二、LINQ 从XML文件中生成csv格式的文本文件

http://msdn.microsoft.com/zh-cn/library/bb387094.aspx

本示例的 C# 版本使用方法语法和 Aggregate 运算符通过一个表达式从 XML 文档生成 CSV 文件。 有关更多信息,请参见LINQ 中的查询语法和方法语法 (C#)。
Visual Basic 版本使用过程代码将字符串集合聚合为一个字符串。
本示例使用下面的 XML 文档:示例 XML 文件:Customers 和 Orders (LINQ to XML)。
C#VB
XElement custOrd = XElement.Load("CustomersOrders.xml");
string csv =
    (from el in custOrd.Element("Customers").Elements("Customer")
    select
        String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}{10}",
            (string)el.Attribute("CustomerID"),
            (string)el.Element("CompanyName"),
            (string)el.Element("ContactName"),
            (string)el.Element("ContactTitle"),
            (string)el.Element("Phone"),
            (string)el.Element("FullAddress").Element("Address"),
            (string)el.Element("FullAddress").Element("City"),
            (string)el.Element("FullAddress").Element("Region"),
            (string)el.Element("FullAddress").Element("PostalCode"),
            (string)el.Element("FullAddress").Element("Country"),
            Environment.NewLine
        )
    )
    .Aggregate(
        new StringBuilder(),
        (sb, s) => sb.Append(s),
        sb => sb.ToString()
    );
Console.WriteLine(csv);
这段代码产生以下输出:
GREAL,Great Lakes Food Market,Howard Snyder,Marketing Manager,(503) 555-7555,2732 Baker Blvd.,Eugene,OR,97403,USA
HUNGC,Hungry Coyote Import Store,Yoshi Latimer,Sales Representative,(503) 555-6874,City Center Plaza 516 Main St.,Elgin,OR,97827,USA
LAZYK,Lazy K Kountry Store,John Steel,Marketing Manager,(509) 555-7969,12 Orchestra Terrace,Walla Walla,WA,99362,USA
LETSS,Let's Stop N Shop,Jaime Yorres,Owner,(415) 555-5938,87 Polk St. Suite 5,San Francisco,CA,94117,USA

  

 

时间: 2024-09-20 00:17:39

LINQ 从 CSV 文件生成 XML的相关文章

CSV文件的生成与分析

  CSV文件是指Excel可以识别的后缀名为CSV的文件,网站系统后台用来存储分析数据的时候有可能会用到它.其实CSV文件的读取和做成比较简单,主要的技术点是文件的读写.不过CSV文件的分析和生成有一定的代表性,可以通过对CSV文件的生成和分析的实现,来了解后台处理批量数据的简单思路. 打开Excel,新建一个文件,在里面随便输入一些数据,然后另存为一个CSV文件,再次用Excel打开的时候,发现只有一个sheet.用一个记事本打开这个文件,可以看到类似如下的数据. aaa,bbb,ccc,d

OleDB读取CSV文件的字符格式问题

问题描述 在使用OleDB读取完CSV文件生成的DataSet中,有一些列的内容被改变.有列A,在CSV中该列的值有:F5;F7;aaa;bbb;等等.但在生成的DataSet中,这些值就变成:5;7;null;null;等等.(含有数字的字符串被转成数值,纯字符组成的字符串被转成null)我在调试的过程中发现,这一列的object类型为decimal.而且其他列没有问题.最后,找到一个解决办法,就是把单元格格式设置为"Text",默认为"Number".想请教一下

LINQ生成XML格式数据与C#序列化成XML实例

LINQ生成XML格式数据  代码如下 复制代码 using System.Xml.Linq; static void Main(string[] args)         {             //LINQ生成XML格式的数据,相比较把对象序列化成XML文件要灵活性好点using System.Xml.Linq;             List<Student> list = new List<Student>             {                

运用CodeSmith代码生引擎生成XML报表文件

xml|生成xml 前段时间做WEB项目时接到一个任务,报表都导出EXCEL.不能用第三方的报表工具,那只能操作EXCEL Library来解决了. 第一种:在服务端调用COM写EXCEL发关到客户端:这样不太可行因为系统的用户数量也很多,C#操作Excel(COM)效率不高,还很消耗服务器资源. 第二种:就是通过JSCRIPT来操作ActiveX,原理和第一种一样:只是操作数据操作放到客户端进行. 这两种方法操作和维护都很烦琐,而且效率也不高. 正在烦恼的时间突然想到了Excel到底能不能打开

用VB将WORD文档(或其他的二进制数据)生成xml文件并互相转换

word|xml|二进制|生成xml|数据|转换 用vb将word文档(或其他的二进制数据)生成xml文件并互相转换1.    建立一个新的vb工程2.    引用 Microsoft XML,版本 2.0 或以上3.    在窗体form1上建立按钮 cmdCreateXML 和 cmdGetBinary 代码:Option ExplicitDim oDoc As DOMDocumentDim DOCINPATH As StringDim XMLOUTPATH As StringDim DOC

jsp读取大对象CLOB并生成xml文件示例

js|xml|对象|生成xml|示例 <%@ page contentType="text/html; charset=gb2312" %><%@ page info="database handler"%><%@ page import="java.io.*"%><%@ page import="java.net.*"%><%@ page import="jav

根据查询结果,生成XML文件

xml|生成xml  /* 'bcp' 不是内部或外部命令,也不是可运行的程序? 看看在C:\Program Files\Microsoft SQL Server\80\Tools\Binn里面有没有bcp.exe这个文件然后看看path里面加C:\Program Files\Microsoft SQL Server\80\Tools\Binn这个目录没有. 右键我的电脑--属性--高级--环境变量--在系统变量中找到path--编辑 在变量值的最后加上: C:\Program Files\Mi

SQL Server根据查询结果,生成XML文件

server|xml|生成xml *'bcp' 不是内部或外部命令,也不是可运行的程序? 看看在C:\Program Files\Microsoft SQL Server\80\Tools\Binn里面有没有bcp.exe这个文件然后看看path里面加C:\Program Files\Microsoft SQL Server\80\Tools\Binn这个目录没有. 右键我的电脑--属性--高级--环境变量--在系统变量中找到path--编辑 在变量值的最后加上: C:\Program File

在Python的Django框架中用流响应生成CSV文件的教程

  这篇文章主要介绍了在Python的Django框架中用流响应生成CSV文件的教程,作者特别讲到了防止CSV文件中的中文避免出现乱码等问题,需要的朋友可以参考下 在Django里,流式响应StreamingHttpResponse是个好东西,可以快速.节省内存地产生一个大型文件. 目前项目里用于流式响应的一个是Eventsource,用于改善跨系统通讯时用户产生的慢速的感觉.这个不细说了. 还有一个就是生成一个大的csv文件. 当Django进程处于gunicorn或者uwsgi等web容器中