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

时间:2009-11-23 11:23:54

标签: c# .net xsd xsd.exe

我正在编写一个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运行时,我最终得到了FileStructureFolderFile的类。 FileStructure有一个名为Folder的属性,它包含一个文件夹数组; Folder有一个名为Folder1的属性,它包含一个文件夹数组。

我不希望将Folder上的属性称为Folder1。使用XSD.exe时如何指定属性和类型的名称?

1 个答案:

答案 0 :(得分: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模式更易于阅读和理解,更清晰,然后只使用那些定义的类型,而不是大量的复杂元素的内联定义及其内联类型。