代码:
//Takes input as values separated by ///
string csvString = "row11,row12,row13///row21,row22,row23///row31,row32,row33";
// Read into an array of strings.
string[] source = csvString.Split(new string[] { "///" }, StringSplitOptions.None);
//Generate XML based on the ',' and source array.
// Note that dbTemplate here is the comma separated template field values (check below)
XElement cust = new XElement("Root",
from str in source
let fields = str.Split(',')
select new XElement("Client",
new XElement(dbTemplate[0], fields[0]),
new XElement(dbTemplate[1], fields[1]),
new XElement(dbTemplate[2], fields[2])
)
);
string result=cust.ToString();
逻辑: 我在SQL db中有一个包含2列的表:IssueType和模板以及用于根据IssueType获取模板的编写代码。
IssueType Template
Client Name,Phone,Address
Claim Name,Type,Date,HandlerName,SettledDate
Incident Place,Cost,Name,Date
上面的代码为3个固定的csv值和相应的3个固定的IssueType-> Tempalte值(即:IssueType = Client)生成XML输出。我想使代码动态化(目前它只适用于IssueType = Client,即:有3个模板值)。没有。逗号分隔CSV中的值始终等于来自db的相应IssueType列的逗号分隔值的数量。请指导。
答案 0 :(得分:0)
我很难跟上这个问题,但我认为你只想将你的select子句更改为:
select new XElement("Client",
dbTemplate.Zip(fields, (name, value) => new XElement(name, value)))
答案 1 :(得分:0)
我不知道我是否理解得很好,但我认为你可以使用像
这样的东西 var str = csvString.TrimStart();
if (str.Split(new string[] { "///" }, StringSplitOptions.None).ToList().Count > 0)
{
foreach(var token in str)
{
var fields = token.Split(',')
switch (fields[0])
{
case "Cust":
{
do something
}
break;
case "Something":
{
do something
}
break;
}
}
}