从CSV文件构建XML(ASP.NET)

时间:2014-04-15 06:13:10

标签: c# asp.net xml csv stringbuilder

我正在尝试从ASP.NET中的CSV文件构建XML字符串。我不需要显示XML页面,因为我要构建XML字符串然后发送到API。 CSV托管在服务器上。

我需要能够遍历CSV直到有一个空白行(因为我使用CSV时行会有所不同)然后停止循环。它将是这样的(<Info>将是来自CSV中不同行的内容):

<Example>
    <Info>
        <Name>This would be the name</Name>
        <Address>This would be the address</Address>
        <Email>This would be the email</Email>
    </Info>
    <Info>
        <Name>This would be the name</Name>
        <Address>This would be the address</Address>
        <Email>This would be the email</Email>
    </Info>
    <Info>
        <Name>This would be the name</Name>
        <Address>This would be the address</Address>
        <Email>This would be the email</Email>
    </Info>
</Example>

如果CSV中有三行,那就是它如何工作的一个例子。

我在Stack Overflow上看到了这段代码:

var lines = File.ReadAllLines("my_csv.csv");

var xml = new XElement("TopElement",
   lines.Select(line => new XElement("Item",
      line.Split(';')
      .Select((column, index) => new XElement("Column" + index, column)))));

xml.Save("my_csv.csv");

我试过了(用我的csv文件名和路径代替),那个页面就不会加载。

关于我做错的任何想法?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的StringBuilder轻松构建它。一个例子是:

void Main()
{
     StringBuilder sb = new StringBuilder();
     sb.Append("<Example>");

    foreach(var line in File.ReadAllLines(@"c:\foo\line.csv"))
    {
      var row = line.Split(',');
      if(row.Length>=3)
      {
        sb.Append("<Info>");
        sb.Append("<Name>"+row[0]+"</Name>");
        sb.Append("<Address>"+row[1]+"</Address>");
        sb.Append("<Email>"+row[2]+"</Email>");
        sb.Append("</Info>");
      }
      else//assume blank row. Break out of loop
         break;
   }
   sb.Append("</Example>"); 

   //sb.ToString() has the piece of XML you want.
}

另一种选择是使用XMLSerializer,但产生输出的方式与您想要/需要完全相同可能不那么简单。