参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx
本示例演示如何使用 语言集成查询 (LINQ) 和 LINQ to XML 从逗号分隔值 (CSV) 文件生成 XML 文件。
下面的代码对字符串数组执行 LINQ 查询。
在 C# 版本中,该查询使用 let 子句将每个字符串分隔成字段数组。
// 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);
这段代码产生以下输出:
<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>