2012/04/26

20120426-程式-藉由xsd.exe將XML產生其Class


(最後自已包裝好的執行檔!)
(真的太久沒寫程式了!全忘了!以後多多記錄【程式心得】吧!!)

程式目的:
1. 將XML的格式,轉成為 C# Class 資訊。
    (xsd.exe 它會是 xml => xsd => class)有中繼檔產生。
2. 直接將 xsd 檔案轉成 Class 資訊。
===========================================
以下為個人回顧之MEMO~~~
===========================================
太久沒寫程式,已經把那xsd.exe的執行方式忘了一乾二淨 (永豐時寫過)
因為目前案子一樣要將電文轉成為Class,而被我翻到之前自已寫的程式執行檔「genXsdToXml.exe」

(這是最原始的版本之執行檔)
(註1:那時怎麼會這樣命名@@;註2:我的Source Code 不見了~害我要找反組譯exe的工具也找不到)



因為忘的太徹底,我今天花了一個下午再把這程式重新寫過。
忘掉資訊依序為:
1. 將 XML 轉成 Class 用什麼工具?
2. 這一個 原始執行檔怎麼用?(因我將目前專案的xml放入,產出很怪的東西,而且沒有Error訊息)
ebAcctListInqRq.xml =>[ebAcctListInqRq.xsd / ebAcctListInqRq_app1.xsd / ebAcctListInqRq_app2.xsd / ebAcctListInqRq_app3.xsd] =>ebAcctListInqRq.cs (空的)
(註:推測它有ns1: 這種別名的東西,才產生那麼多)
3. xsd.exe 的command 怎麼下? http://goo.gl/0FXYD
在寫程式過程中:
1. 如何呼叫一個 .exe 檔並傳參數?
(真的一整個被放空,完全不會寫)
2. 如何建目錄? (Ans:用 Directory.CreateDirectory(xmlfilepath))
如何建檔案?(Ans:用File.Create(outputresultfile).Close())
也在想說,有沒有可以那種 「建檔案,就直接幫你建目錄」的寫法??(Ans:沒找到)
3. 專案Build 後複製檔案寫法?


===================================================================
【記錄一】:如何呼叫process 並傳參數


【記錄二】:xsd.exe 的參數 http://goo.gl/0FXYD
in [VS tool]~~
[xml to xsd]:xsd XXX.xml /out:folder
[xsd to cs]:xsd /dataset /l:cs XXX.xsd /n:namespace1 /out:folder
(這由我原始筆記來的)
而[/dataset 與 /classes]不同之處:
[/classes]:Generates classes that correspond to the specified schema. To read XML data into the object, use the System.Xml.Serialization.XmlSerializer.Deserializer method.
[/dataset]:Generates a class derived from DataSet that corresponds to the specified schema. To read XML data into the derived class, use the System.Data.DataSet.ReadXml method.

【記錄三】:由目錄下找檔案

1. 無法直接篩選我要的.xml 副檔名,就用LINQ去篩選。
2. 因xsd.exe 參數中的[目錄] 不可以有空白 (沒試過加雙引號有沒有用)
就採用相對路徑。

string arguments = string.Format("{0} /out:{1}",
xmlfile.Replace(currentPath, ""), outputpath.Replace(currentPath, ""));//note參數目錄有空白就不行



嗯,有達到目標,並強化它的功能。

以後多看別人的Blog ,並且直接 實作寫Code ,不然,忘的真的一大推!!

(THE END)
(花一小時記錄)

0 意見 :

張貼留言