【问题标题】:How to convert xsd to cs with redundancies? (OTA XML Publication)如何将 xsd 转换为具有冗余的 cs? (OTA XML 发布)
【发布时间】:2018-04-24 01:47:45
【问题描述】:

我正在尝试创建一个基于 SOAP 1.2 的 C#/WCF 接口,它应该处理 HTNG/OTA 消息。 (酒店通信标准)

此 OTA 标准的发布可在此处找到:Open Travel Alliance - Specifications

此出版物包含一堆 .xsd 文件,这些文件定义了可以通过此类接口传递的所有类型。例如,要将新预订转移到酒店/系统,您可以使用 OTA_HotelResNotifRQ 消息,该消息可以包含 HotelReservations。 SOAP XML 看起来像这样:

<soapenv:Body>
  <OTA_HotelResNotifRQ EchoToken="1474033560.151702" TimeStamp="2016-09-16T06:46:00-08:00" Version="1.001" xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 NeedToGetThisPathFromIdeas/OTA_HotelResNotifRQ.xsd" ResStatus="Modify">
    <POS>
    ...
    </POS>
    <HotelReservations>
      <HotelReservation CreateDateTime="2015-11-15T10:39:01-08:00" ResStatus="Reserved" LastModifyDateTime="2016-09-16T06:46:00-08:00">
        <UniqueID Type="14" ID="133121274"/>
        <RoomStays>
          <RoomStay MarketCode="Other OTA" SourceOfBusiness="OTA">
          ...
          </RoomStay>
        </RoomStays>
      </HotelReservation>
    </HotelReservations>
  </OTA_HotelResNotifRQ>
</soapenv:Body>

问题在于有多个消息,因此多个 .xsd 定义使用相同的元素/类。例如,对于上面提到的 HotelReservations,所有标记的消息都使用它:

所有这些 .xsd 文件都定义了相同的类,例如 HotelReservation 或 RoomStay 等,并且还有一个附加的 .xsd(HotelReservation,不是 RQ 或 RS)定义了这些消息中使用的类型。我的意思是这些模式定义非常非常多余。

当我尝试使用 .NET Framework 中的 xsd.exe 或 WSCF.Blue 从这些文件生成 .cs 类时,我会遇到所有重复的类型,例如 HotelReservationType 将由OTA_HotelResRQ.cs,又是 OTA.HotelResNotifRQ.cs,又是 etc。这当然会导致无用的代码,并导致 Visual Studio 疯狂地到处喊“模棱两可的引用”。

如何将这些 .xsd 定义转换为 .cs 类而没有冗余,所有类型只定义一次?有没有工具可以做到这一点,或者 Open Travel Alliance 真的把他们的出版物搞砸了,我简直被搞砸了?

【问题讨论】:

  • 有人吗?...我不可能是唯一一个面临此类问题的人...

标签: c# soap xsd code-generation redundancy


【解决方案1】:

您需要创建一个包含/导入所有您需要的架构文件,然后从中生成代码,看看Working with multiple XML schemas

如果 xsd.exe 没有产生您想要的输出,请查看 Liquid XML Data Binder

【讨论】:

    猜你喜欢
    • 2019-02-19
    • 2020-01-17
    • 2014-02-22
    • 2022-01-19
    • 2021-05-08
    • 2016-09-17
    • 2015-12-05
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多