将 Web 表单中的 XML 响应更改为 CSV 文件
Posted
技术标签:
【中文标题】将 Web 表单中的 XML 响应更改为 CSV 文件【英文标题】:Change XML response in web form into CSV file 【发布时间】:2011-06-15 21:36:19 【问题描述】:您好,我有以下已编辑的应用程序代码 -
public partial class ConvertApp : Form
public ConvertApp()
InitializeComponent();
static webservice.Results res= new webservice.Results(out int factSent,out int ComSent)
private static webservice.Results convert()
string csv = File.ReadAllText("C:\\test.txt");
string year = "1000" ;
XDocument doc = ConvertCsvToXML(csv, new[] "," );
webservice.Feed CallWebService = new webservice.Feed();
int recordAmount=0;
factSent = 0;
ComSent = 0;
foreach(XElement el in doc.Descendants("row"))
recordAmount = recordAmount+1;
webservice.Summary[] Summary = new webservice.Summary[recordAmount];
int i=0;
foreach(XElement el in doc.Descendants("row"))
Summary[i] = new webservice.Summary();
Summary[i].person = el.Descendants("var").Where(x => (string)x.Attribute("name") == "person").SingleOrDefault().Attribute("value").Value;
Summary[i].fact = System.Convert.ToInt32(el.Descendants("var").Where(x => (string)x.Attribute("name") == "fact").SingleOrDefault().Attribute("value").Value);
Summary[i].com = System.Convert.ToInt32(el.Descendants("var").Where(x => (string)x.Attribute("name") == "com").SingleOrDefault().Attribute("value").Value);
Summary[i].Centre = el.Descendants("var").Where(x => (string)x.Attribute("name") == "Centre").SingleOrDefault().Attribute("value").Value;
Summary[i].CCentre = el.Descendants("var").Where(x => (string)x.Attribute("name") == "CCentre").SingleOrDefault().Attribute("value").Value;
factSent += Summary[i].fact;
ComSent +=Summary[i].com;
i=i+1;
webservice.Results res = CallWebService.updateStatus(Summary, year);
return res;
private void Form1_Load(object sender, EventArgs e)
int factSent;
int ComSent;
webservice.Results returned = convert(out factSent, out ComSent);
txtResult.Text = System.Convert.ToString(returned.status);
txtMoreRes.Text = returned.errorDetails[i].errorDetails;
factSum.Text = System.Convert.ToString(returned.factSum);
comSum.Text = System.Convert.ToString(returned.comSum);
factSumSent.Text = factSent.ToString();
comSumSent.Text = ComSent.ToString();
time.Text = System.Convert.ToString(DateTime.Now.TimeOfDay);
date.Text = System.Convert.ToString(DateTime.Today);
lineFault.Text = System.Convert.ToString(returned.errDetails[i].lineFault);
我的问题是我使用获取结果的方法将结果加载到 Web 表单中以进行演示。但是现在我想将 xml 响应加载到 CSV 文件中并将该文件自动保存到特定路径,我不再需要将应用程序作为 Web 表单,并且不知道如何执行此操作。
这是响应 XML 的示例 -
<return>
<factSum>24</factSum>
<comSum>15</comSum>
<errDetails>
<errors>The person [123] is unknown , The
centre [14] is unknown </errors>
<Position>0</Position>
</errDetails>
<status>lineFault</status>
</return>
</ns2:FeedResponse>
</S:Body>
我希望 .CSV 文件看起来像 -
日期、时间、factSent、ComSent、factSum、comSum、错误、位置、状态 26/01/2011,14:00,24,15,24,15,人[123]未知,0,lineFault
我已经尝试过 StringBuilder SbCSV 但无法让它工作,因为我不确定如何更改现有代码以使用它。
我还尝试使用看起来像的 XLS 模板 using System.Configuration;
和 System.Xml.Xsl;
-
<xsl:template match="//return".
<xsl:value-of select="factsum">
//etc
</xsl:template>
然后取出-private void Form1_Load(object sender, EventArgs e)
进入
static void Main(string[] args)
string oldXML = ConfigurationSettings.AppSettings["res"];
string xsltLocation = ConfigurationSettings.AppSettings["Path to where xsl template is saved"];
string new CSV = ConfigurationSettings.AppSettings["Path to where I want the new CSV to go"];
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("Path to where xsl template is saved");
transform.Transform(oldXML, newCSV);
这给我带来了public partial class ConvertApp : Form
的问题,而且它是static void Main
,我认为模板配置不正确。
任何帮助都将不胜感激,并感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:我不完全确定我是否遵循了您遇到的问题,但是从适当的模板创建一个新项目并粘贴到相关的基于 stringbuilder 的代码中是否比尝试修改您的 Web 服务项目更容易?
【讨论】:
我只需要将结果保存为 csv 格式,然后保存到特定位置,但仍然绞尽脑汁! 解析您的输入并随时创建 StringBuilder 是构建 CSV 版本的正确方法,恕我直言,并且在最后保存到磁盘很简单。我仍然不太确定我是否遵循了确切的问题,但这似乎与将项目从作为 Web 服务输出转换为生成此文本文件有关。在这种情况下,使用更合适的基本模板(例如 Windows / 控制台应用程序)并将相关代码粘贴到其中的新项目可能会让您的生活更简单。【参考方案2】:这在chat 中进行了讨论,得出以下结论:
目标是从 Web 表单写入文件响应,如 here 所述 通过 xslt 将输入 xml 转换为目标 csv 几乎涵盖了(碰巧,很像 here) 要编写 csv,我们要设置“content-type”和“content-dispositon”标头,如 here 所讨论的那样【讨论】:
以上是关于将 Web 表单中的 XML 响应更改为 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 中将此模板驱动的表单更改为反应式表单?