Category Archives: XML

.Net Post XML via HTTPS Notes 2 [Convert Class object to XML]

上一篇筆記示範了怎麼把XSD 轉成.NET CLASSES
 .Net Post XML via HTTPS Notes 1 [Convert XSD to .Net Class]
今日我們便可以利用上次Generate 出來的 classes
來建立一些我們需要用到的Object 了
最重要既一個步驟是 要在 Class 上 加入之前create 的 namespace.

當大家建立好要用的object 時
我們便可以開始了

首先我們要加入一些Reference
Imports System.Xml.Serialization 
Imports System.IO Imports System.Text

我們要建立一個 XmlSerializer Object 要輸入的parameter 是你將要Convert 的 Object Type
E.G. ‘我要convert 的Class 是
Dim ClassToBeConvert as New ClassNameOfTheObj
‘—- 當你改好這個Class 入面的 Properties 後 我們便可以轉這個Class 做XML String 了
Dim ConvertToXmlString As New StringBuilder ‘這個用來 Store這個XML String 的

Dim xSerializer as New XmlSerializer(GetType(ClassNameOfTheObj))
Dim sw as New StringWriter(CovertToXMLString)
xSerializer.Serialize(sw, ClassToBeConvert )
sw.Close()

MsgBox(ConvertToXmlString .ToString) ‘這便會POPUP 這個轉CLASS 的XML STRING 了

由於這個XML Interface 要我 post XML String 到這個HTTPS
所以如果我直接把剛剛 convert 好的 XML String post 去HTTPS
會有Exception 出現的
因為這個剛剛Convert 出來的XML 是一個Well Form的 XML
[這個XML String 會 contain string 的 format 所以便會有space 和 隔行]
所以會有自動隔行 [vbCrLf] 的情況出現…
“Specified value has invalid CRLF characters. Parameter name: value”

解決的方法亦都是很簡單
只要使用 String.Replace這個function便可
E.G.MsgBox(ConvertToXmlString .ToString.Replace(vbCrLf, “”)) ‘這便會POPUP 這個轉CLASS 的XML STRING 了
這樣我們便有了一個可以在HTTPS 上Post 的 XML String了

待續…
Hope you find it useful.
如果你有更好的方法, 歡迎大家一齊來研究研究

.Net Post XML via HTTPS Notes 1 [Convert XSD to .Net Class]

最近公司有一個project是要用另外一間公司的 XML Interface 既Webservice 去做exchange data.
其實只要這間公司提供WSDL 既Address 給我們
這個project 便很容易完成…
很可惜這間公司不願提供WDSL file
所以最後便要自己學怎樣在VB.Net 入面post XML 去HTTP 了

便這了這篇筆記了

還記得之前用WSDL時
當我Add 了Service Reference Visual Studio 便會自動產生了和這 Web service 有關的 .NET Object 和Connection End Point
一切都十分方便…

現在所有事都要自己Handle 感到有點煩惱…
等一個STEP 便是要找 方法把
Developer Guide 入面的XSD 轉做 .Net Object
或者你要自己寫一些CLASSES 出來
去做一些 function 可以return 到XML OUTPUT 可以Match 到
Developer Guide 入面你需要POST的 XML Rule.

以下是我的做法

首先你要找到這個XSD.EXE file
在我的電腦入面是在以下的directory
C:Program FilesMicrosoft SDKsWindowsv6.0ABin

或者你可以試試 SEARCH
xsd.exe” 之後copy 這個檔案去另一個location
或到”xsd.exe“後便用Command Prompt
[我將這個.EXE copy 到 裝有 xsd 檔案的 directory 入面 (這樣可以方便自己打小一些path)]

之後開啓command prompt
Start“-> “Run“-> Type “cmd” ->Press “Enter
在command prompt 入面
進入有 “xsd.exe” 的 directory 入面
之後打以下的Command 你便可以create 一個 class base on 這個xsd 檔案了
MyXMLObjNameSpace 是我想這個Class 用的namespace.
XMLToExampleCLass.xsd 是我轉的xsd file.
我用的 language 是 VB.NET

VB
xsd.exe –cl:vbn:MyXMLObjNameSpace XMLToExampleCLass.xsd

C#
xsd.exe -c -l:c# -n:MyXMLObjNameSpace XMLToExampleCLass.xsd

xsd.exe -c[-c mean general Class] -l:[Language Name e.g. c#/vb] -n:[Namespace] [XSD file name]

如果你的XSD 檔案不是 proper define command prompt 便會出示一些error message 說出那裡出現問題就好像下面一樣

這樣你便要看清楚你的XSD 檔案是否Well define 了

如果你的xsd 檔案是沒有問題
他便會出現…
Writing file “C:pathXMLToExampleCLass.vb”

當你完成之後只要COPY 這個VB 檔案到你的VB project
之後imports 這個namespace 你便可以使用這個class 了

E.G.
VB
Imports MyProgram.MyXMLObjNameSpace
C#
using MyProgram.MyXMLObjNameSpace;

Hope you find it useful.
如果你有更好的方法, 歡迎大家一齊來研究研究