2015-09-04 81 views
4

我想從XSD文件使用XSD.EXE工具創建一個類。但由於某種原因我得到這個錯誤。無法生成類,因爲沒有找到複雜類型的頂級元素

警告:無法生成類,因爲找不到具有 複雜類型的頂級元素。

我看了看周圍的堆棧,發現我可以在複雜類型元素上放置一個類型,但我似乎無法讓我工作。這裏是xsd文件

<?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:schema> 

謝謝!

+0

您的XSD不包含任何頂級'xs:element',因此它不存在任何對該XSD有效的XML。也許你想寫' ...'? – sergioFC

回答

2

您的XSD只定義了一種類型(正如Sergio也建議的那樣)。因此,除非它被另一個XSD導入,否則它不能用於驗證XML。同樣,其他工具如xsd.exe也無法對其進行任何明智的處理。

您可以將其與具有接口定義的C#庫進行比較,但沒有實現該接口。

你可以用各種方法解決這個問題。考慮到當前的代碼,我會建議類似的規定:

<?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> 

雖然你可能考慮重新命名的類型名稱,防止混淆,以饗讀者。一個常見的模式是後綴Type,在你的情況下,DocumentIdentificationType的類型名稱。

上面的代碼可以用xsd.exe導入,沒有任何問題。

+0

謝謝@Abel,這對我有用。好的解釋,我明白你的意思與接口的解釋。 –

相關問題