2009-11-23 54 views
2

我正在寫有一個描述文件結構的元素的XSD架構:如何在使用XSD.exe時爲屬性指定名稱?

<xs:schema 
    ... 
> 
    <xs:element name="FileStructure"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="Folder" minOccurs="1" maxOccurs="1" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="Folder"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" /> 
     <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" /> 
     </xs:sequence> 
     <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="AccessionFile"> 
    <xs:complexType mixed="true"> 
     ... 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

當我通過XSD.EXE運行此,我結束了類FileStructureFolderFile。 FileStructure有一個名爲Folder的屬性,它包含一個文件夾數組;文件夾有一個名爲Folder1的屬性,其中包含文件夾數組。

我不希望文件夾的屬性被稱爲Folder1。如何在使用XSD.exe時爲屬性和類型指定名稱?

回答

4

你不能 - XSD會爲你做到這一點。你不能影響C#代碼最終會怎麼樣。

你可以嘗試做的是在XSD中使用類型,而不是定義一切內聯。例如。定義一個<xs:complexType name="FolderType">,然後在你的主定義使用:

<xs:complexType name="FolderType"> 
    <xs:sequence> 
     <xs:element name="Folder" type="FolderType" minOccurs="0" maxOccurs="unbounded" /> 
     <xs:element ref="File" minOccurs="0" maxOccurs="unbounded" /> 
    </xs:sequence> 
    <xs:attribute name="name" type="xs:string" use="required" /> 
    </xs:complexType> 

    <xs:sequence> 
    <xs:element name="Folder" type="FolderType" minOccurs="1" maxOccurs="1" /> 
    </xs:sequence> 

也許,讓你更多的靈活性來命名,因爲它分離的類型,並從實際名稱的定義被用作元素名稱。另外,一般來說,當我將事物定義爲顯式類型(複雜類型或簡單類型),然後使用這些定義的類型(而不是大量的)時,我發現我的XML模式更易於閱讀和理解,並且更清晰。令人費解的內聯元素定義和它們的內聯類型。

相關問題