c# - 使用 XSD.exe 时如何指定属性名称?

标签 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的属性,它保存一个文件夹数组;文件夹有一个名为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/

相关文章:

java - cvc-复杂-类型.3.2.2 : Attribute 'xsi:schemalocation' is not allowed to appear in element 'jtis_journey_list'

c# - 将小型 C# 校验和程序转换为 Java

c# - 您如何在层次结构的某个级别而不是最低级别调用类的方法?

c# - 何时何地使用表达式树

c# - 在GridView/DetailsView中显示外键数据

c# - 模拟傻瓜?

c# - 将 Byte[] 解析为文件而不保存

c# - Assembly.GetTypes() 返回奇怪的类型名称,例如 "<>c"

.net - 如何避免 "The element ' x' in namespace 'x.xsd' has invalid child element 'Items' in namespace 'x.xsd' "?

xml - 如何在 XSD 中为多个元素重用复杂类型?