当文件具有交叉引用时生成多个元素时,XSD.EXE会出错

时间:2012-08-08 19:11:47

标签: xsd xsd.exe xsd-validation xsd2code xsdobjectgen

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

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

我很困惑,该怎么办?

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

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

谢谢

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

2 个答案:

答案 0 :(得分:3)

您的方案与我发布的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

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

答案 1 :(得分: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_RS.xsd   hotel_precancel_RQ.xsd hotel_precancel_RS.xsd hotel_deals_RQ.xsd   \ hotel_deals_RS.xsd