2011-01-26 10 views
1

ファイルこんにちは、私は次のよう編集されたアプリケーション・コードを持っている -変更XML応答が

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フォームにロードするために、結果をgettngの方法を使用しています。しかし、私はCSVファイルにロードするxmlレスポンスを取得し、そのファイルを特定のパスに自動的に保存したいので、アプリケーションを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ファイルが何かを見てみたいlike-

日付、時間、factSent、ComSent、factSum、comSum、エラー、位置、状態 26/01/2011,14:00,24,15,24,15、人[123]は、私はStringBuilderのSbCSVを試してみましたが、それを得ることができませんでしたlineFault

0不明です私がいなくても働く既存のコードを変更して使用する方法を確認してください。しかしpublic partial class ConvertApp : Form で私に問題を与え、またそれこと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); 
} 

この

に入った -

<xsl:template match="//return". 
<xsl:value-of select="factsum"> 
//etc 
</xsl:template> 

そして取り出した - は、私はまたのように見えたXLSテンプレートusing System.Configuration;System.Xml.Xsl;を使用してみましたstatic void Mainであり、テンプレートが正しく構成されていなかったと思います。

お手数をおかけしていただきありがとうございました。

答えて

2

これは、以下の結論と、chatで議論されました:

  • 目的は、入力XMLの翻訳がターゲットのcsvへhere
  • をカバーして、Webフォームからのファイルの応答を書くことですほとんどカバーされ、XSLT経由で
  • やcsvファイルを書き込むように説明したように、私たちは、「コンテンツタイプ」と「コンテンツ・dispositon」ヘッダを設定したい(これは、かなりのhereように起こるように)here
0

あなたは問題を抱えていますが、適切なテンプレートから新しいプロジェクトを作成し、関連するstringbuilderベースのコードをWebサービスプロジェクトの修正に使用するよりも簡単に作成できますか?

+0

結果を取得してcsv形式で保存し、特定の場所に保存するだけで、頭を悩ます必要があります。 – Ebikeneser

+0

入力を解析してStringBuilderを作成することは、CSVバージョンIMHOを構築する正しい方法であり、最後にディスクに保存するのが簡単です。私はまだ正確な問題に従っているかどうかはまだ分かりませんが、プロジェクトをWebサービスとして出力してこのテキストファイルを作成することとは何かが関係しています。どのような場合には、より適切な基本テンプレート(Windows /コンソールアプリなど)を使用して関連するコードを貼り付けるという新しいプロジェクトが、あなたの人生をよりシンプルにするかもしれません。 – eftpotrm

関連する問題