2012-04-04 33 views
38

Tôi đang gặp khó khăn với các tệp XSD.Làm thế nào để tạo một lược đồ XSD từ một lớp?

Tôi đang cố gắng để tạo ra một tập tin XSD từ một lớp học:

public enum Levels { Easy, Medium, Hard } 
public sealed class Configuration 
{ 
    public string Name { get;set; } 
    public Levels Level { get; set; } 
    public ConfigurationSpec { get;set;} 
} 

public abstract class ConfigurationSpec { } 
public class ConfigurationSpec1 
{ 
    // ... 
} 
public class ConfigurationSpec2 
{ 
    // ... 
} 

Xin lưu ý rằng tôi có một lớp trừu tượng bên trong Configuration. Với tính năng đó, có thể tạo XSD và nếu nó có thể như thế nào?

Ý tưởng là chuyển Cấu hình lớp cho XSD.

+0

Bạn có thể sử dụng [Công cụ định nghĩa lược đồ XML miễn phí (Xsd.exe)] miễn phí (http://msdn.microsoft.com/en-us/library/x6c1kb0s.aspx). –

Trả lời

26

Bạn có thể sử dụng XSD.exe (Có sẵn từ Visual Studio cài đặt của bạn.)

public sealed class Configuration 
{ 
public string Name { get; set; } 
public Levels Level { get; set; } 
public ConfigurationSpec Spec { get; set; } 
} 
public abstract class ConfigurationSpec { } 
public class ConfigurationSpec1 { } 
public class ConfigurationSpec2 { } 

kết quả trong

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Levels" type="Levels" /> 
    <xs:simpleType name="Levels"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Easy" /> 
     <xs:enumeration value="Medium" /> 
     <xs:enumeration value="Hard" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="Configuration" nillable="true" type="Configuration" /> 
    <xs:complexType name="Configuration"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" /> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="ConfigurationSpec" abstract="true" /> 
    <xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" /> 
    <xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" /> 
    <xs:complexType name="ConfigurationSpec1" /> 
    <xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" /> 
    <xs:complexType name="ConfigurationSpec2" /> 
</xs:schema> 

Tất cả bạn phải làm là biên dịch assembly của bạn và chạy XSD.exe với đường dẫn để bạn lắp ráp làm đối số. XSD.exe /? cũng có danh sách tất cả các đối số.

Ví dụ: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

+1

Bạn có thể cho tôi biết bạn đã làm theo các bước nào để tạo ra nó? –

+0

Nó ném tôi: Lỗi - Không thể tải tập tin hoặc tập tin 'lắp ráp: /// C: /../test.exe' hoặc một trong các phụ thuộc của nó. Một nỗ lực đã được thực hiện để tải một chương trình với một định dạng không chính xác. –

+1

@DarfZon cố gắng thay đổi nó thành cùng kiến ​​trúc với hệ điều hành của bạn (x64, x86). – Peter

57

Bạn thành công có thể tích hợp xsd.exe vào Visual Studio IDE như thế này:

Đi vào Tools, External Tools và nhấp vào Thêm nút:

enter image description here

2015/2017

enter image description here

Title:

Tạo Schema Từ Lớp

Command (mỗi khung):

4,0

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe

4.5.1

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe

4,6.*

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe

Arguments:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

Sử dụng cửa sổ Output:

Ngăn chặn một cửa sổ lệnh thêm từ nảy lên và giữ một kỷ lục về sản lượng cho đến khi bạn xóa nó đi. Có lẽ là một ý tưởng hay.

Prompt Đối với luận cứ:

Kiểm tra nếu bạn muốn kiểm tra đầu ra hoặc khắc phục sự cố; nếu không, hãy bỏ chọn.

Bấm OK

Làm thế nào để sử dụng:

  1. Biên dịch dự án của bạn!XSD.exe chỉ xem mã được biên dịch.
  2. Nhấp vào lớp học trong Solution Explorer.
  3. Bấm Tools, Create Schema From Class
  4. Bấm vào Show All Files nút trong Solution Explorer.
  5. Tìm trong cùng thư mục với lớp học của bạn và bạn sẽ thấy Schema0.xsd.
  6. Nhấp chuột phải vào Schema0.xsd và chọn Include In Project
  7. Đổi tên Schema0.xsd để <the name of the class>.xsd
  8. (không bắt buộc) Bạn có thể phải chỉnh sửa mới xsd này bằng tay nếu bạn muốn chỉnh sửa file xml trong trình soạn thảo xml sử dụng sơ đồ này và bạn không sử dụng tất cả các thuộc tính. Bạn có thể thay thế use="required" bằng use="optional" để loại bỏ các đường thẳng màu xanh lam trong trình chỉnh sửa xml (tạo cảnh báo), nếu thực sự các thuộc tính này không bắt buộc.
+2

Đừng quên bước ** 1 Biên dịch **, trong quá trình sử dụng, như tôi đã làm.Đã cho tôi một thời gian để nhận ra: $ –

+1

@ R.Schreurs, nhấn mạnh thêm. Cảm ơn! – toddmo

+0

Câu trả lời này rất hay. Cảm ơn. Theo ý kiến ​​của bạn là có thể thêm các ý kiến ​​đã viết trong lớp cũng trong tập tin đầu ra XSD? – theLaw

Các vấn đề liên quan