我正在编写一个 XSD 架构,其中有一个描述文件结构的元素:
<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的属性,它保存文件夹数组。
我不希望将“Folder”上的属性称为“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 模式更易于阅读、理解和清晰。元素的内联定义及其内联类型。
关于c# - 使用 XSD.exe 时如何指定属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1782542/