2010-05-03 33 views
6

Tôi có một giản đồ đơn giản, trong đó tôi khai báo cả minOccurs và maxOccurs thành 1. Khi tôi chạy XSD.exe để tạo ra một lớp C# và tiêu thụ lớp trong mã; trường không được thực thi như là bắt buộc. Có một số bước bổ sung bị thiếu? hoặc các lớp được tạo ra bằng cách sử dụng XSD.exe không phải là trường bắt buộc phải không?XSD.exe không thực thi minOccurs

mọi đề xuất hoặc thông tin chi tiết sẽ hữu ích.

Trả lời

0

Bạn đúng là XSD.EXE không thực thi các yêu cầu xuất hiện. Điều này được thiết kế.

7

Giống như công cụ giản đồ Xml/infer trong studio trực quan, bất cứ khi nào tôi sử dụng XSD.exe, tôi đã kết thúc sửa một số mã được tạo. XSD.exe làm một xấp xỉ tốt nhưng nó không hoạt động hoàn toàn.

minOccurs/maxOccurs 'bug' được ghi lại trên MSDN.

Khi tạo mã nguồn từ một tài liệu Schema XML, xsd.exe bỏ qua các minOccurs thuộc tính áp dụng cho các sự lựa chọn <>, < sequence>, < nhóm>, < tất cả>, và < bất kỳ> các yếu tố.

Đối với phần tử, Xsd.exe bỏ qua thuộc tính minOccurs nếu giá trị thuộc tính maxOccurs là lớn hơn 1 hoặc không bị chặn. Trong trường hợp này, công cụ tạo ra một mảng là loại tương ứng với loại dữ liệu XSD . Xsd.exe sử dụng giá trị thuộc tính maxOccurs để xác định cho dù tạo một cá thể đơn lẻ hoặc một mảng.

Đối với nguyên tố này, xsd.exe cũng bỏ qua minOccurs thuộc tính nếu nó được áp dụng cho một kiểu dữ liệu schema có thể chuyển đổi cho một loại tài liệu tham khảo .NET Framework.

Chỉ khi tất cả các điều kiện sau là đúng sự thật không xsd.exe sử dụng các giá trị của thuộc tính minOccurs:

Yếu tố có liên quan.

Thuộc tính maxOccurs ra lệnh cho một trường hợp đơn lẻ .

Loại dữ liệu chuyển thành giá trị loại.

1

Làm cách nào để bạn thực thi một mã vạch tùy ý trong mã? Một số loại xác nhận? Tôi đoán bạn chỉ có thể ánh xạ tới mảng không thể vô hiệu hóa "(1: 1)" (1: nhiều) và tương đương không có giá trị (0; 1) và (0: nhiều)