如何将一组csv行转换为xml?

时间:2010-11-20 20:14:30

标签: c# xml xml-serialization

有没有办法获取电子表格并将其转换为下面的xml文件?

<?xml version="1.0"?>
<ArrayOfBusiness xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Business>
    <Name>Company Name 1</Name>
    <AddressList>
      <Address>
        <AddressLine>123 Main St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
  <Business>
    <Name>Company Name 2</Name>
    <AddressList>
      <Address>
        <AddressLine>1 Elm St.</AddressLine>
      </Address>
      <Address>
        <AddressLine>2 Elm St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
</ArrayOfBusiness>

3 个答案:

答案 0 :(得分:2)

我把它放在LinqPad中,它完成了你需要的工作。如果您从未使用过LinqPad ......那么现在是开始的好时机。

 var csvs = new List<string>();  

csvs.Add( "Company Name 1,123 Main St."); 
 csvs.Add("Company Name 2,1 Elm St.,2 Elm St."); 

 var xml = 
 (from c in csvs 
 let split = c.Split(',')
 select  // split
 new XElement("ArrayOfBusiness", 
    new XElement("Business", 
        new XElement("Name", split[0] ), 
        new XElement("AddressList", 
          new XElement("Address"
            ,
            (from s in split.Skip(1) // skip the first split 
            select 
            new XElement("AddressLine", s)) 
        )
 )))); // <-- is it LISP? 

 xml.Dump();

结果:

<ArrayOfBusiness>
  <Business>
    <Name>Company Name 1</Name>
    <AddressList>
      <Address>
        <AddressLine>123 Main St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
  <Business>
    <Name>Company Name 2</Name>
    <AddressList>
      <Address>
        <AddressLine>1 Elm St.</AddressLine>
        <AddressLine>2 Elm St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
</ArrayOfBusiness> 

这不完全是你想要的,但在功能上与我相当。可能需要在LINQ中进行一些调整。

使用以下代码写入文件:File.WriteAllText(@"c:\temp\addresses.xml", xml.ToString());

答案 1 :(得分:0)

将.csv文件解析为“Business”对象应该很简单。

然后是一个使用XmlSerializer类生成xml的简单案例。

答案 2 :(得分:0)

我会说是的,但是看不到CSV文件很难说。

如果你的CSV是这样的:

  

姓名,地址1,地址2

     

公司名称1,123 Main St。,

     

公司名称2,1 Elm St.,1 Elm St。

您可以轻松地将其解析为一个类。

class Business
{
  public string Name { get; set; }
  public List<Address> AddressList { get; set; }
}

class Address
{
  public string AddressLine { get; set; }
}

(未测试的)