我正在尝试从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文件名和路径代替),那个页面就不会加载。
关于我做错的任何想法?谢谢。
答案 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,但产生输出的方式与您想要/需要完全相同可能不那么简单。