将Web表单中的XML响应更改为CSV文件

时间:2011-01-26 14:39:12

标签: c# xml web-services csv

您好我有以下编辑的应用程序代码 -

 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);
       }

我的问题是我使用gettng结果的方法加载到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,我认为模板配置不正确。

非常感谢任何帮助,感谢您的时间。

2 个答案:

答案 0 :(得分:2)

chat中对此进行了讨论,得出以下结论:

  • 目标是从Web表单编写文件响应,如here
  • 所述
  • 通过xslt覆盖了输入xml到目标csv的转换(实际上就像here一样)
  • 并编写csv,我们要设置“content-type”和“content-dispositon”标题,如上所述here

答案 1 :(得分:0)

我不完全确定我是否会遇到您遇到的问题但是从相应的模板创建新项目并粘贴相关的基于字符串构建器的代码比尝试修改您的Web服务项目更容易吗? / p>