Tôi tin rằng XSD2Code là công cụ tốt nhất hiện có (năm 2011).
Gần đây, tôi đã trải qua quá trình tương tự trong công việc phân tích các công cụ có sẵn ngoài đó, vì vậy tôi nghĩ mình sẽ cung cấp câu trả lời cập nhật liên quan đến VS2010 .
Trình điều khiển chính của chúng tôi là xsd.exe đó không tạo tài liệu XML từ các chú thích XSD, điều mà chúng tôi muốn vì chúng tôi có hàng trăm định nghĩa kiểu. Tôi đã thử tất cả các công cụ được liệt kê ở trên cũng như các công cụ khác và hầu hết đều không được dùng nữa, không bị lỗi hoặc không thể khớp với chức năng hiện tại của xsd.exe có sẵn trong VS2010.
Xsd2CodeTuy nhiên, là một công cụ tuyệt vời và dường như được duy trì tích cực. Nó cung cấp tất cả các chức năng đã được liệt kê ở trên và nhiều hơn nữa - trang CodePlex cũng có các ví dụ tuyệt vời về cách các tùy chọn khác nhau ảnh hưởng đến đầu ra.
Nó cũng có tích hợp VS chặt chẽ, bao gồm tích hợp menu ngữ cảnh và công cụ xây dựng tùy chỉnh (có nghĩa là nếu bạn tham chiếu XSD trong dự án của mình và chỉ định công cụ tùy chỉnh, nó sẽ tự động cập nhật mã khi bạn cập nhật XSD). Tất cả đã tiết kiệm cho chúng tôi rất nhiều công việc.
Bản tóm tắt nhanh về các công cụ khác mà tôi đã xem xét:
- Dingo - Có vẻ phù hợp hơn với Java
- XSDCodeGen - Thêm bản demo về cách viết một công cụ xây dựng tùy chỉnh
- CodeXS - Một công cụ khá tốt, nhưng ít tích hợp, nhiều tính năng và không còn được duy trì
- XSDObjectGen - Không còn được duy trì, ít chức năng hơn xsd.exe hiện tại
- XSDClassGen - Không thể định vị nó
- Thư viện OXM - Khuyên bạn nên xem dự án này, được duy trì và chức năng tuyệt vời
- LINQ sang XSD - Dự án rất hay , nhưng không phải là thứ tôi đang tìm kiếm
Phụ lục:
Nếu bạn quyết định tiếp tục với XSD2Code, có một số vấn đề tôi đã tìm thấy khi làm việc với công cụ dòng lệnh. Đặc biệt, có một số lỗi với quá trình xử lý đối số yêu cầu một số đối số theo một thứ tự nhất định cũng như một số phụ thuộc không có tài liệu (ví dụ - tham số tự động & phiên bản .NET là thứ tự cụ thể và phụ thuộc). Sau đây là các bước tôi đã sử dụng để tạo mã bằng XSD2Code và sau đó dọn dẹp đầu ra - lấy các bit áp dụng cho bạn nếu cần:
Chạy tệp lô sau để tạo mã ban đầu, thay đổi đường dẫn đến đúng vị trí:
@echo off
set XsdPath=C:\schemas
set OutPath=%XsdPath%\Code
set ExePath=C:\Progra~1\Xsd2Code
set Namespace=InsertNamespaceHere
echo.Starting processing XSD files ...
for /f %%a IN ('dir %XsdPath%\*.xsd /a-d /b /s') do call:ProcessXsd %%a
echo.Finished processing XSD files ...
echo.&pause&
goto:eof
:ProcessXsd
%ExePath%\Xsd2Code %~1 %Namespace% %XsdPath%\Code\%~n1%.cs /pl Net35 /if- /dc /sc /eit
echo.Processed %~n1
goto:eof
Thực hiện các bước sau để dọn dẹp mã đã tạo, nếu cần:
- Thay thế Regex - dự án hiện tại, trường hợp, toàn bộ từ - [System.Runtime.Serialization.DataContractAttribute (Tên: b * =: b *: q,: b Không gian tên: b =: b * {: q})] với [DataContract ( Không gian tên = \ 1)]
- Thay thế - dự án hiện tại, trường hợp, toàn bộ từ - [System.Runtime.Serialization.DataMemberAttribute ()] với [DataMember]
- Regex thay thế - dự án hiện tại, trường hợp, toàn bộ từ - System.Nullable \ <{: w}> với \ 1 \?
- Regex thay thế - mở tài liệu, trường hợp, toàn bộ từ - {: w} TYPE với \ 1
- Thay thế - mở tài liệu, trường hợp, toàn bộ từ - System.DateTime bằng DateTime , sau đó thêm các câu lệnh bị thiếu bằng cách sử dụng
- Thay thế - mở tài liệu, trường hợp, toàn bộ từ - [System.Xml.Serialization.XmlIgnoreAttribute ()] bằng [XmlIgnore]
- Thay thế - dự án hiện tại - System.Xml.Serialization.XmlArrayAttribute với XmlArray
- Thay thế - dự án hiện tại - System.Xml.Serialization.XmlArrayItemAttribute với XmlArrayItem
- Regex thay thế - dự án hiện tại - , [: Wh] + /// \ <nhận xét / \> với ,
Hy vọng rằng sẽ giúp một ai đó.