【问题标题】:Unable to generate class from xsd. Undefined complexType is used as a base for complex type extension无法从 xsd 生成类。未定义的 complexType 用作复杂类型扩展的基础
【发布时间】:2014-11-19 07:59:35
【问题描述】:

我正在尝试从下面提到的 xsd 生成一个类,但出现以下异常:

Undefined complexType 'http://ws.orbitz.com/schemas/v3/Hotel:BasicStayDetails' 用作复杂类型扩展的基础。

Xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
            targetNamespace="http://ws.orbitz.com/schemas/v3/Hotel"
            xmlns:com="http://ws.orbitz.com/schemas/v3/Common"
            xmlns="http://ws.orbitz.com/schemas/v3/Hotel">

    <xsd:include schemaLocation="hotel_common.xsd"/>

    <xsd:import namespace="http://ws.orbitz.com/schemas/v3/Common" schemaLocation="../common/common.xsd"/>

    <xsd:element name="HotelShoppingResponse">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:extension base="com:CommonResponseValues">
                    <xsd:sequence>
                        <xsd:element name="PaginationKey" type="xsd:string" minOccurs="0" maxOccurs="1">
                            <xsd:annotation>
                                <xsd:documentation xml:lang="en">
                                    Key to identify multiple hotel search requests performed for pagination. This key
                                    will be used for tracking the client sessions for the same search criteria on
                                    Pagination.
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="Location" type="com:Location" minOccurs="0" maxOccurs="1"/>
                        <xsd:element name="StayDetails" type="ShopStayDetails" minOccurs="1" maxOccurs="1"/>
                        <xsd:element name="Hotels" type="Hotels" minOccurs="1" maxOccurs="1"/>
                        <xsd:element name="Areas" type="com:Areas" minOccurs="0" maxOccurs="1"/>
                    </xsd:sequence>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="ShopStayDetails">
        <xsd:complexContent>
            <xsd:extension base="BasicStayDetails"/>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="Hotels">
        <xsd:sequence>
            <xsd:element name="Hotel" type="ShopHotel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="href" type="xsd:anyURI" use="required"/>
        <xsd:attribute name="hasMoreHotels" type="xsd:boolean" use="optional"/>
        <xsd:attribute name="responseCount" type="com:Number" use="required"/>
        <xsd:attribute name="totalCount" type="com:Number" use="required">
            <xsd:annotation>
                <xsd:documentation>
                    This attribute reflects all the hotels that matches the search criteria
                    regardless of availability.
                </xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:complexType name="ShopHotel">
        <xsd:sequence>
            <xsd:element name="Details" type="ShopDetails" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Rooms" type="ShopRooms" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ShopDetails">
        <xsd:complexContent>
            <xsd:extension base="BasicDetails">
                <xsd:sequence>
                    <xsd:element name="Areas" type="com:NeighborhoodAreas" minOccurs="0" maxOccurs="1">
                        <xsd:annotation>
                            <xsd:documentation xml:lang="en">Optional element - Contains list of neighborhood location
                                ids.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="availability" type="xsd:string" use="optional">
                    <xsd:annotation>
                        <xsd:documentation xml:lang="en">Optional element to distinguish the availability status of a
                            hotel as Available or Unknown.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="ShopRooms">
        <xsd:complexContent>
            <xsd:extension base="BasicRooms">
                <xsd:sequence>
                    <xsd:element name="RoomRates" type="RoomRates" minOccurs="0" maxOccurs="4"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

</xsd:schema>

我们将不胜感激。 提前致谢。

【问题讨论】:

  • 什么是定义: 除非它可以查找到 BasicStayDetails,否则它将是未知的。
  • Jonatan :它太大了,我不能粘贴它。请提出建议。
  • 我会在 Altova XMLSpy 中打开 XSD,看看在查找部分导入时是否有问题。如果是,则需要在生成类之前修复。您尝试使用什么工具来生成类?
  • 定义成hotel_common.xsdcomplexTypeBasicStayDetails?当缺少 XSD 的引用(包含或导入)或缺少元素的定义时,会发生此错误。

标签: xml class xsd


【解决方案1】:

修正路径

schemaLocation="../common/common.xsd"/>

并添加缺少的 xsd。 来自视觉工作室:

  1. 在解决方案资源管理器中添加 xsd。
  2. 右键单击root xsd,然后单击生成xml
  3. 将 xml 转换为类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多