3

我有 orbitz(全球酒店分销系统)xsd 架构,并希望从这些 xsd 文件生成 c#.Net 类。

当我使用 Xsd.Exe 或 XSD2Code 或其他东西时,生成的类会将复杂类型从导入的文件复制到内部,因此多个文件具有相同的类。

我很困惑,该怎么办?

您可以从以下链接下载 xsd 架构文件。我需要在“hotel”文件夹中使用 xsd 文件的 c# 类。

生成 xsd 文件后,请将这些 .cs 文件添加到项目中并查看错误。

谢谢

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

4

2 回答 2

3

您的场景与我在 SO 上发布此解决方案的场景非常相似。对于您的场景,我也尝试过,并且生成的代码可以正确编译。

您的问题与 xsd.exe 中的限制有关。解决方法是重构 XSD,使其使用最少数量的 XSD 文件(不使用 xsd:include)捕获您想要处理的所有范围,然后运行生成器。

就您而言,这就是您所拥有的:

QTAssistant 显示 Orbitz XSD 文件关系

这是重构后的 XSD 的样子:

QTAssistant 显示 XSR 重构的 Orbitz 文件关系

xsd.exe 命令行看起来像这样(省略完整路径):

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

生成的代码编译没有任何问题。

于 2012-08-09T13:12:38.010 回答
2

谢谢Petru,我通过另一个渠道找到了答案。

我将文件放入同一个文件夹,并将导入文件位置更改为同一个文件夹,因为 xsd.exe 要求文件位于同一个文件夹中。

然后下面的命令生成确切的 c# 库。

xsd.exe /c /f /l:cs /namespace:Schema 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_RQ.xs xsd hotel_precancel_RS.xsd hotel_deals_RQ.xsd .\hotel_deals_RS.xsd

于 2012-08-11T09:35:24.413 回答