如何在使用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运行此,我结束了类FileStructure
,Folder
和File
。 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模式更易于阅读和理解,并且更清晰。令人费解的内联元素定义和它们的内联类型。