----------
20181129
xsd
ref:
https://dotblogs.com.tw/yc421206/2011/03/07/21710
[C#.NET][XML] XSD Convert XML
XSD檔案是負責描述XML結構的東西,裡面存放了一些資訊,比如欄位的資料型態,我們可以用XSD來驗証XML是否符合規則,SDK底下有個工具xsd.exe 專門用來處理*.xsd檔案,路徑在
x64:C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin
x86:C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin
假設今天我只拿到了一個XSD檔案,我一個念頭閃過就是將它欄位取出,但要怎麼取?本篇將使用xsd.exe
template for required strings
template for optional strings
轉成Class
xsd D:\Employee.xsd /c /O:D:\
轉成Dataset
xsd D:\Employee.xsd /c /O:D:\
如何使用Dataset
轉成Dataset的檔案我們把它加到專案裡後,雙擊Employee.cs,它會出現在工具箱。
將工具箱裡的Emp加入至專案,進行資料繫結
設定好DataSource屬性後,Column欄位的名稱就浮現出來了,有了ADO.NET家族的東東,利用WriteXml方法就很輕易的能轉成XML檔案
利用WriteXml方法就能輕易的轉成Xml檔案
private void button1_Click(object sender, EventArgs e)
{
DataSet ds = dataGridView1.DataSource as DataSet;
ds.WriteXml("Employee.xml");
}
如何使用Class
同樣的將轉好的Employee.cs加入至專案內,然後引用它們。[ADO.NET] 類別(Data Transfer Object )與資料繫結
private void Form1_Load(object sender, EventArgs e)
{
Emp emp = new Emp();
EmpInfo info = new EmpInfo();
info.Code = "1";
info.FirstName = "余";
info.LastName = "咬章魚";
info.Destination = "台北"
emp.EmpInfo = info;
BindingList list = new BindingList();
list.Add(info);
this.dataGridView1.DataSource = list;
}
然後再將類別序列化,輕而易舉的就轉成Xml了。
private void button1_Click(object sender, EventArgs e)
{
XmlSerializer xml = new XmlSerializer(this._Emp.GetType());
Stream stream = new FileStream("Employee1.xml", FileMode.Create, FileAccess.Write, FileShare.None);
xml.Serialize(stream, this._Emp);
stream.Close();
}
如果不想用Xsd.exe,直接利用Datatable或Dataset的ReadXml將XSD讀入也是不錯的一招:
private void button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml("Employee.xsd");
foreach (DataTable table in ds.Tables)
{
Debug.WriteLine(table.TableName);
}
DataTable t = new DataTable("EmpInfo");
t.ReadXml("Employee.xsd");
}
這樣便輕鬆取得資料結構,接下來要怎麼應用就看個人了。
後記:
Class在處理這些資料時都是相當的方便阿,這是基本的用法千萬別忘記阿,附帶一提,小的在處理XSD遇到一個問題,這是一個無法轉檔的問題,貼出連結提供給將來碰到問題的捧油解決之道。
可能是我拿到的xsd檔本身就有問題,朱大與阿尼都指出是XSD檔結構的問題,並非指令下達錯誤。
http://social.msdn.microsoft.com/Forums/zh-TW/239/thread/8e62987a-1e67-4feb-8856-ee801ee2baa2/
若有謬誤,煩請告知,新手發帖請多包涵