如何在使用XSD.exe时为属性指定名称?

问题描述:

我正在写有一个描述文件结构的元素的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时为属性和类型指定名称?

你不能 - 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模式更易于阅读和理解,并且更清晰。令人费解的内联元素定义和它们的内联类型。