2010-03-05 35 views
15

Tôi đang cố gắng xây dựng một số lớp để tôi có thể deserialise một tệp XML được tạo bởi ứng dụng của bên thứ ba. May mắn là nhà phát triển ứng dụng của bên thứ ba bao gồm tệp lược đồ có mã của họ để tệp XML có thể được hiểu.XSD.exe và "Tham chiếu Nhóm Thông tư"

Khi tôi sử dụng công cụ XSD.exe từ Visual Studio quá trình thất bại báo cáo các lỗi sau

"Nhóm 'SegGroupOrSegmentGrouping' từ targetNamespace = '' có nghĩa không hợp lệ: tài liệu tham khảo Thông tư nhóm."

Bất kỳ trợ giúp nào về cách tôi có thể tạo tệp lớp học theo lỗi này sẽ được đánh giá cao. Một bản sao của tập tin giản đồ có thể được tìm thấy ở đây: schema file

+0

Sau khi thực hiện thêm một số nghiên cứu, có vẻ như có một số vấn đề với công cụ XSD.exe. Tôi đang tiến bộ bằng cách sử dụng công cụ tạo mã của công cụ của bên thứ ba đã tạo mã C# từ lược đồ mà không gặp bất kỳ sự cố nào (và cũng tạo ra nhiều tệp lớp tốt hơn). –

+0

Bạn đã sử dụng công cụ của bên thứ ba nào, bởi vì tôi có cùng một vấn đề? – jitm

+0

BENBUN, bạn có thể cho chúng tôi biết về công cụ này không? – Yurik

Trả lời

12

Tôi có vấn đề này cùng thời gian gần đây,

tôi đã được đưa ra một Schema từ một công ty bên thứ ba đã được trả lại một cấu trúc xml từ một webservice. Sau đó tôi muốn deserialise phản ứng và lưu trữ các thông tin vào một cơ sở dữ liệu với NHibernate.

Không có vấn đề gì tôi nghĩ tôi sẽ chỉ sử dụng xsd.exe và tôi sẽ có các lớp học của mình. Thật không may điều này đã không được. Xsd.exe thất bại với chính xác cùng một lỗi bạn đang nhận được. Điều này là do nó không thể giải quyết các tham chiếu vòng tròn.

Tôi đã dành một vài ngày tốt để xem các lựa chọn thay thế cho đến cuối cùng tôi đã viết cấu trúc lớp của riêng mình cho giản đồ và có thể deserialise hoàn hảo. Câu trả lời ở đây là viết các lớp C# của riêng bạn và trang trí chúng với các thuộc tính thích hợp.

Tiết kiệm thời gian và đau khổ và không tiếp tục thử và tạo các lớp bạn cần tự động cuối cùng mặc dù tốn thời gian các lớp bạn viết sẽ không gây ra sự thỏa hiệp mà hầu hết các công cụ (không hoạt động hoàn hảo) sẽ làm cho bạn thực hiện.

Mất khoảng 3 ngày để viết cấu trúc lớp học (nó lớn) nhưng tôi đã kết thúc với một giải pháp chất lượng.

Một điều chắc chắn là bạn sẽ không thể sử dụng xsd.exe và hầu hết các công cụ khác mà tôi đã thử sau khi googling điều này hoặc không hoạt động đúng hoặc bị lỗi.

+2

Krystan - Tôi phải đồng ý, đó cũng chính là kết quả của tôi. Tôi đã viết các lớp học bằng tay. –

+1

Tôi chỉ có cùng một vấn đề, nhưng đã giải quyết nó mà không cần mã hóa thủ công, chỉ bằng cách thực hiện gia tăng xsd.exe trên các tệp xsd đã sửa đổi. http://devio.wordpress.com/2012/05/22/dealing-with-circular-group-reference-errors-in-xsd-exe/ – devio

+1

Cách tiếp cận gia tăng sẽ hoạt động nhưng không tốt nếu bạn cần tạo một cách tự động và sửa đổi xsds là tổng số không-không nếu bạn không phải là chủ sở hữu. Chỉ cần $ 0.02 –

2

Sau khi thử một số công cụ của bên thứ ba, tôi thấy rằng Liquid Technologies có một máy phát điện rất mạnh mẽ được gọi là Liquid XML Data Binder 2012. Nó có thể xử lý vấn đề tham chiếu nhóm tròn mà tôi phải đối mặt. Nó có thể tạo mã cho bất kỳ phiên bản nào của .net từ 2.0 trở lên. Các lớp nó tạo ra phụ thuộc vào một dll redistributable mà họ cung cấp. Tôi đang sử dụng phiên bản dùng thử và tôi sẽ không ngạc nhiên nếu việc mua phiên bản đầy đủ sẽ cần thiết trước khi tôi phát hành. Tuy nhiên, đã cứu tôi có lẽ một trăm giờ hoặc nhiều hơn của mã hóa dễ bị lỗi, tôi không thể phàn nàn.

0

Phương pháp đơn giản nhất đối với tôi là tạo tệp XSD từ tệp XML thực tế bằng XSD.EXE. Sau đó tạo một lớp từ tệp XSD mới. Bạn có thể được yêu cầu sửa đổi lớp theo định kỳ nếu các nút hoặc các kiểu được giới thiệu không tồn tại trong XML gốc nhưng bạn sẽ tiết kiệm cho mình GIỜ thời gian mã hóa !!!!

7

Thử sử dụng svcutil; nó có thể xử lý các tham chiếu vòng tròn.

Trong ví dụ sau, eExact-Schema.xsd là một XSD mà xsd.exe không thể xử lý.

Ví dụ:

C:\SRC\Exact>svcutil eExact-Schema.xsd /language:C# /dataContractOnly /importxmltypes /out:exact.cs 

Đây luôn là một nơi tốt để bắt đầu; bây giờ bạn có thể sử dụng lớp này và thay đổi cho phù hợp với phong cách/nhu cầu của bạn, thêm nhận xét, v.v. và nó sẽ giúp bạn tiết kiệm rất nhiều thời gian/tìm kiếm để làm tất cả từ đầu.

+1

Insane. Điều này tạo ra toàn bộ các lớp học khổng lồ từ đặc tả OpenCollada, trong khi XSD ngay lập tức thất bại. Tốt đẹp! –

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