Cannot generate classes because no top-level elements with complex type where found

后端 未结 2 1808
后悔当初
后悔当初 2021-01-04 23:03

I am trying to create a class from a xsd file using the XSD.EXE tool. but for some reason i get this error.

Warning: cannot generate classes because n

相关标签:
2条回答
  • 2021-01-04 23:52

    It would be better to use SvcUtil.exe instead of xsd.exe. It will allow you to avoid the problem with generating classes based on types-only XSDs. An example of .bat file:

    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\SvcUtil.exe MySchema.xsd TypesSchema.xsd /dconly /n:*,MyNamespace
    pause
    
    0 讨论(0)
  • 2021-01-04 23:53

    You XSD only defines a type (as Sergio also suggested). As such, it cannot be used for validation of XML, unless it is imported by another XSD . Likewise, other tools like xsd.exe will not be able to anything sensible with it.

    You can compare this with a C# library having an interface definition, but no implementation of the interface.

    You can fix this in a variety of ways. Considering your current code, I would suggest something along those lines:

    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"
        xmlns="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"
        elementFormDefault="qualified" attributeFormDefault="unqualified">
    
        <xs:complexType name="DocumentIdentification">
            <xs:sequence>
                <xs:element name="Standard" type="xs:string" />
                <xs:element name="TypeVersion" type="xs:string" />
                <xs:element name="InstanceIdentifier" type="xs:string" />
                <xs:element name="Type" type="xs:string" />
                <xs:element name="MultipleType" type="xs:boolean" minOccurs="0" />
                <xs:element name="CreationDateAndTime" type="xs:dateTime" />
            </xs:sequence>
        </xs:complexType>
    
        <xs:element name="DocumentIdentification" type="DocumentIdentification" />
    </xs:schema>
    

    Though you may consider renaming the type name, to prevent confusion to readers. A common pattern is to suffix typenames with Type, in your case, DocumentIdentificationType.

    The code above is importable with xsd.exe without any problems.

    0 讨论(0)
提交回复
热议问题