2012-08-08 32 views
1

我有orbitz(全球酒店分佈系統)xsd模式並希望從這些xsd文件生成c#.Net類。XSD.EXE在文件交叉引用時生成多個元素時出錯

當我使用Xsd.Exe或XSD2Code或其他類型時,生成的類將複製類型從導入的文件複製到內部,因此多個文件具有相同的類。

我很困惑,該怎麼辦?

您可以從下面的鏈接下載xsd模式文件。我需要在「hotel」文件夾中工作c#類的xsd文件。

生成xsd文件後,請將這些.cs文件添加到項目中並查看錯誤。

感謝

XSD文件=> http://rapidshare.com/files/1062702005/orbitz-pws-schemas-1.42.zip

+0

並當您運行XSD.EXE你用什麼選擇? – EkoostikMartin 2012-08-08 19:22:47

+0

我檢查了幫助文件,並沒有找到合適的選項來設置問題。 xsd.exe PWS/hotel/common.xsd PWS/hotel/hotel_shopping。xsd/c/o:Orbitz 我也試過/ edb選項,但沒有任何改變。 – AltugCan 2012-08-09 09:35:59

回答

1

感謝Petru,我通過另一個渠道找到了我的答案。

我將這些文件放入同一個文件夾,並將導入文件位置更改爲相同的文件夾,因爲xsd.exe需要文件位於同一文件夾中。

然後下面的命令生成確切的c#庫。

XSD.EXE/C/F/L:CS /名稱空間:架構common.xsd hotel_common.xsd hotel_shopping.xsd hotel_raterules_RQ.xsd hotel_raterules_RS.xsd hotel_itinerary_RQ.xsd hotel_itinerary_RS.xsd hotel_booking_RQ.xsd hotel_booking_RS。 XSD hotel_cancel_RQ.xsd hotel_cancel_RS.xsd hotel_precancel_RQ.xsd hotel_precancel_RS.xsd hotel_deals_RQ.xsd 。\ hotel_deals_RS.xsd

+0

你是「幸運的」:)...因爲這適用於你的情況。我曾經使用過XSD,即使在同一個文件夾中也會導致xsd.exe和XmlSchemaSet(在.NET 4.0中)失敗。另一方面,擺脫所有的xsd:include永遠不會失敗... +1分享! – 2012-08-11 18:01:27

2

你的情況是大同小異的一個,其我已發佈this solution,也在SO上。我也試過了,對於你的場景,我得到了正確編譯的生成代碼。

您的問題與xsd.exe中的限制有關。解決方法是重構XSD,以便捕獲您想要使用最少數量的XSD文件(不使用xsd:include)處理的所有範圍,然後運行生成器。

在你的情況,這是你擁有的一切:

QTAssistant showing Orbitz XSD file relationships

這是重構的XSD的樣子:

QTAssistant showing XSR refactored Orbitz file relationships

的XSD.EXE命令行看起來像此(省略完整路徑):

xsd.exe Vendor.xsd Hotel.xsd Air.xsd DynamicPackaging.xsd Car.xsd Common.xsd /language:CS /classes /out:xsd2code 

生成的代碼編譯時沒有任何問題。