XML 結構描述定義工具 (Xsd.exe)
XML 結構描述定義工具 (Xsd.exe) 可以從 XDR、XML 和 XSD 檔案或從執行階段組件的類別中,產生 XML 結構描述或 Common Language Runtime 類別。
XML 結構描述定義工具 (Xsd.exe) 通常可在以下路徑中找到:
C:\Program Files (x86)\Microsoft SDKs\Windows\{version}\bin\NETFX {version} Tools\
語法
從命令列執行工具。
xsd file.xdr [-outputdir:directory][/parameters:file.xml]
xsd file.xml [-outputdir:directory] [/parameters:file.xml]
xsd file.xsd {/classes | /dataset} [/element:element]
[/enableLinqDataSet] [/language:language]
[/namespace:namespace] [-outputdir:directory] [URI:uri]
[/parameters:file.xml]
xsd {file.dll | file.exe} [-outputdir:directory] [/type:typename [...]][/parameters:file.xml]
提示
為了讓 .NET Framework 工具正常運作,必須正確地設定 Path
、Include
和 Lib
等環境變數。 執行位於 <SDK>\<版本>\Bin 目錄中的 SDKVars.bat,即可設定這些環境變數。 SDKVars.bat 必須在每一個命令提示字元中執行。
引數
Argument | 描述 |
---|---|
file.extension | 指定要轉換的輸入檔。 您必須指定以下所列的副檔名:.xdr、.xml、.xsd、.dll 或 .exe。 如果指定 XDR 結構描述檔 (副檔名為 .xdr ),Xsd.exe 會將 XDR 結構描述轉換成 XSD 結構描述。 輸出檔有和 XDR 結構描述一樣的名稱,但是具有 .xsd 副檔名。 如果指定 XML 檔 (副檔名為 .xml ),Xsd.exe 會從檔案中的資料推斷結構描述,然後產生 XSD 結構描述。 輸出檔有和 XML 檔一樣的名稱,但是具有 .xsd 副檔名。 如果指定 XML 結構描述檔 (.xsd 副檔名),Xsd.exe 會產生對應到 XML 結構描述之 Runtime 物件的原始程式碼。 如果指定執行階段組件檔 (.exe 或 .dll 副檔名),Xsd.exe 會產生該組件中一個或多個型別的結構描述。 您可以使用 /type 選項來指定要產生結構描述的型別。 輸出結構描述被命名為 schema0.xsd、schema1.xsd 等等。 只有在指定的型別使用 XMLRoot 自訂屬性來指定命名空間 (Namespace) 時,Xsd.exe 才能產生多個結構描述。 |
一般選項
選項 | 描述 |
---|---|
/h[elp] | 顯示工具的命令語法和選項。 |
/o[utputdir]:directory | 指定輸出檔的目錄。 這個引數只可以使用一次。 預設值是目前的目錄。 |
/? | 顯示工具的命令語法和選項。 |
/p[arameters]:file.xml | 從指定的 .xml 檔案,讀取各種作業模式的選項。 簡短形式為 /p: 。 如需詳細資訊,請參閱備註一節。 |
XSD 檔案選項
您只能為 .xsd 檔指定下列其中一個選項:
選項 | 描述 |
---|---|
/c[lasses] | 產生對應到指定的結構描述的類別。 若要將 XML 資料讀入物件,請使用 XmlSerializer.Deserialize 方法。 |
/d[ataset] | 產生衍生自 DataSet 的類別,對應到指定的結構描述。 若要將 XML 資料讀入衍生類別,請使用 DataSet.ReadXml 方法。 |
您也可以為 .xsd 檔指定下列任何選項:
選項 | 描述 |
---|---|
/e[lement]:element | 指定所要產生程式碼的結構描述中的項目。 根據預設,會輸入所有項目。 您可以多次指定這個引數。 |
/enableDataBinding | 在所有產生的型別上實作 INotifyPropertyChanged 介面,以啟用資料繫結 (Data Binding)。 簡短形式為 /edb 。 |
/enableLinqDataSet | (簡短形式:/eld 。)指定產生的 DataSet 可使用 LINQ to DataSet 查詢。 如果也指定了 /dataset 選項,就會使用這個選項。 如需詳細資訊,請參閱 LINQ to DataSet 概觀和查詢具類型資料集。 如需關於使用 LINQ 的一般資訊,請參閱 Language-Integrated Query (LINQ) - C# 或 Language-Integrated Query (LINQ) - Visual Basic。 |
/f[ields] | 只產生欄位。 根據預設,會產生具有支援欄位的屬性。 |
/l[anguage]:language | 指定要使用的程式語言。 可以選擇 CS (C#,此為預設值)、VB (Visual Basic)、JS (JScript) 或 VJS (Visual J#)。 您也可以對實作 System.CodeDom.Compiler.CodeDomProvider 的類別指定完整名稱。 |
/n[amespace]:namespace | 指定產生的型別的執行階段命名空間。 預設命名空間是 Schemas 。 |
/nologo | 隱藏產品啟始畫面。 |
/order | 在所有物件成員上產生明確順序識別項。 |
/o[ut]:directoryName | 指定要在其中放置檔案的輸出目錄。 預設值是目前的目錄。 |
/u[ri]:uri | 指定所要產生程式碼的結構描述中項目的 URI。 這個 URI 如果存在,會套用到所有以 /element 選項指定的項目。 |
DLL 和 EXE 檔案選項
選項 | 描述 |
---|---|
/t[ype]:typename | 指定所要建立結構描述的型別名稱。 您可以指定多個型別引數。 如果 typename 沒有指定命名空間,Xsd.exe 會以指定的類型比對組件中的所有類型。 如果 typename 指定命名空間,只有該類型會被比對。 如果「typename」結尾為星號字元 (*),則工具會比對 * 之前以這個字串為開頭的所有類型。 如果省略 /type 選項,Xsd.exe 會產生組件中所有型別的結構描述。 |
備註
下表列出 Xsd.exe 執行的作業。
作業 | 描述 |
---|---|
XDR 轉換成 XSD | 從 XML-Data-Reduced 結構描述檔中產生 XML 結構描述。 XDR 是早期 XML 架構的結構描述。 |
XML 轉換成 XSD | 從 XML 檔案中產生 XML 結構描述。 |
XSD 轉換成 DataSet | 從 XSD 結構描述檔中產生 Common Language Runtime DataSet 類別。 產生的類別為一般 XML 資料提供了豐富的物件模型。 |
XSD 轉換成類別 | 從 XSD 結構描述檔中產生執行階段類別。 產生的類別可以配合 System.Xml.Serialization.XmlSerializer 使用,以讀取和寫入遵循結構描述的 XML 程式碼。 |
類別轉換成 XSD | 從型別或執行階段組件檔中的型別中產生 XML 結構描述。 產生的結構描述會定義 XmlSerializer 所使用的 XML 格式。 |
Xsd.exe 只允許您操作遵循 XML 結構描述定義 (XSD) 語言的 XML 結構描述,而這個 XSD 語言是由全球資訊網協會 (W3C) 所提出的。 如需 XML 結構描述定義提議或 XML 標準的詳細資訊,請參閱 https://w3.org。
設定 XML 檔案的選項
使用 /parameters
參數時,您可以指定會設定各種選項的單一 XML 檔案。 您可以設定的選項會視使用 XSD.exe 工具的方式而定。 這些選擇包括產生結構描述、產生程式碼檔或產生內含 DataSet
功能的程式碼檔。 例如,您可以在產生結構描述時 (但不是在產生程式碼檔案時),將 <assembly>
項目設為可執行檔 (.exe) 或型別程式庫 (.dll) 檔案的名稱。 下列 XML 會顯示如何使用 <generateSchemas>
項目搭配指定的可執行檔:
<!-- This is in a file named GenerateSchemas.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
<assembly>ConsoleApplication1.exe</assembly>
</generateSchemas>
</xsd>
如果前一個 XML 內含在名為 GenerateSchemas.xml 的檔案中,則在命令提示字元中鍵入下列命令,並按 Enter 鍵,就可以使用 /parameters
參數:
xsd /p:GenerateSchemas.xml
換句話說,如果針對在組件中找到的單一型別產生結構描述,就可以使用下列 XML:
<!-- This is in a file named GenerateSchemaFromType.xml. -->
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateSchemas>
<type>IDItems</type>
</generateSchemas>
</xsd>
但是若要使用之前的程式碼,您也必須在命令提示字元中提供組件的名稱。 在命令提示字元中輸入下列命令 (假設 XML 檔案的名稱為 GenerateSchemaFromType.xml):
xsd /p:GenerateSchemaFromType.xml ConsoleApplication1.exe
您只能為 <generateSchemas>
項目指定下列其中一個選項。
元素 | 描述 |
---|---|
<assembly> | 指定要產生結構描述的組件。 |
<type> | 指定在組件中找到的型別,以用於產生結構描述。 |
<xml> | 指定用於產生結構描述的 XML 檔案。 |
<xdr> | 指定用於產生結構描述的 XDR 檔案。 |
若要產生程式碼檔,請使用 <generateClasses>
項目。 下列範例會產生程式碼檔。 請注意,也會顯示兩個屬性,可讓您設定所產生檔案的程式設計語言和命名空間。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateClasses language='VB' namespace='Microsoft.Serialization.Examples'/>
</xsd>
<!-- You must supply an .xsd file when typing in the command line.-->
<!-- For example: xsd /p:genClasses mySchema.xsd -->
您可以對 <generateClasses>
項目設定的選項包括下列各項。
元素 | 描述 |
---|---|
<element> | 指定要產生程式碼之 .xsd 檔案中的項目。 |
<schemaImporterExtensions> | 指定衍生自 SchemaImporterExtension 類別的型別。 |
<schema> | 指定用於產生程式碼的 XML 結構描述檔案。 多個 XML 結構描述檔案可以使用多個 <schema> 元素指定。 |
下表顯示也可以和 <generateClasses>
項目搭配使用的屬性。
屬性 | 描述 |
---|---|
語言 | 指定要使用的程式語言。 可以選擇 CS (C#,此為預設值)、VB (Visual Basic)、JS (JScript) 或 VJS (Visual J#)。 您可以對實作 CodeDomProvider 的類別指定完整名稱。 |
命名空間 | 指定產生之程式碼的命名空間。 命名空間必須符合 CLR 標準 (例如,沒有空白或反斜線字元)。 |
電子商務選項中 | 下列其中一個值:none 、properties (產生屬性而非公用欄位)、order 或 enableDataBinding (請參閱先前<XSD 檔案選項>一節中的 /order 和 /enableDataBinding 參數)。 |
您也可以使用 DataSet
項目,控制產生 <generateDataSet>
程式碼的方法。 下列 XML 會指定產生的程式碼使用 DataSet
結構 (例如 DataTable 類別),以建立所指定元素的 Visual Basic 程式碼。 所產生的 DataSet 結構將會支援 LINQ 查詢。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateDataSet language='VB' namespace='Microsoft.Serialization.Examples' enableLinqDataSet='true'>
</generateDataSet>
</xsd>
您可以對 <generateDataSet>
項目設定的選項包括下列各項。
元素 | 描述 |
---|---|
<schema> | 指定用於產生程式碼的 XML 結構描述檔案。 多個 XML 結構描述檔案可以使用多個 <schema> 元素指定。 |
下表顯示可以和 <generateDataSet>
項目搭配使用的屬性。
屬性 | 描述 |
---|---|
enableLinqDataSet | 指定產生的 DataSet 可使用 LINQ to DataSet 查詢。 預設值為 false。 |
language | 指定要使用的程式語言。 可以選擇 CS (C#,此為預設值)、VB (Visual Basic)、JS (JScript) 或 VJS (Visual J#)。 您可以對實作 CodeDomProvider 的類別指定完整名稱。 |
命名空間 | 指定產生之程式碼的命名空間。 命名空間必須符合 CLR 標準 (例如,沒有空白或反斜線字元)。 |
在最上層 <xsd>
項目中有一些您可以設定的屬性。 這些選項可以和任何子項目搭配使用 (<generateSchemas>
、<generateClasses>
或 <generateDataSet>
)。 下列 XML 程式碼會對名為 "IDItems" 的項目,在名為 "MyOutputDirectory" 的輸出目錄中產生程式碼。
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/' output='MyOutputDirectory'>
<generateClasses>
<element>IDItems</element>
</generateClasses>
</xsd>
下表顯示也可以和 <xsd>
項目搭配使用的屬性。
屬性 | 描述 |
---|---|
output | 將放置產生的結構描述或程式碼檔的目錄名稱。 |
nologo | 隱藏產品啟始畫面。 設為 true 或 false 。 |
說明 | 顯示工具的命令語法和選項。 設為 true 或 false 。 |
範例
下列命令會從 myFile.xdr
產生 XML 結構描述,並將它儲存到目前的目錄。
xsd myFile.xdr
下列命令會從 myFile.xml
產生 XML 結構描述,並將它儲存到指定的目錄。
xsd myFile.xml /outputdir:myOutputDir
下列命令會產生對應到以 C# 語言指定之結構描述的資料集,並在目前的目錄中將它儲存為 XSDSchemaFile.cs
。
xsd /dataset /language:CS XSDSchemaFile.xsd
下列命令會對 myAssembly.dll
組件中的所有型別產生 XML 結構描述,並在目前的目錄中將它們儲存為 schema0.xsd
。
xsd myAssembly.dll