创建 XSD 以对 C# 标志枚举进行身份验证



我有一个可以执行的命令的标志枚举

[Flags]
public enum Operations
{
    InstallNothing = 0,
    InstallStateDatabase = 1,
    InstallStateServer = 2,
    InstallStoreDatabase = 4,
    InstallStoreServer = 8,
    InstallMaintenanceProgram = 16,
    InstallOther=32
}
[XmlElement("Commands")]
public Operations Commands { get; set; }

我希望能够读取XML文件并根据xsd解析它。 我有我的 xsd 的这一部分试图处理验证,但我认为这是不正确的。

<xs:element name="commands" maxOccurs="1" minOccurs="1">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="command" minOccurs="1" maxOccurs="unbounded" >
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="InstallNothing" />
                <xs:enumeration value="InstallStateDatabase" />
                <xs:enumeration value="InstallStateServer" />
                <xs:enumeration value="InstallStoreDatabase" />
                <xs:enumeration value="InstallStoreServer" />
                <xs:enumeration value="InstallMaintenanceProgram" />
                <xs:enumeration value="InstallOther" />
              </xs:restriction>
            </xs:simpleType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

XML将是手动创建的,所以我不想存储int值,因为创建者不知道int值应该是什么。

如果可能的话,我希望我的 C# 代码保持不变,并重新设计我的 XSD 以反映我的 C# 代码中应该包含的内容。 目前,VS2013生成的一些生成的文本XML具有多个不同的命令元素。 我知道我的 XSD 就是这样写的,但这不是我想要的。 我想要一个元素,它可以在枚举中具有任何字符串。 如何设置此 XSD,以及发送多个不同命令的此实现的示例 XML 是什么样子的。

我在XSD 从枚举或等效类型中选择多个值。 我之前没有搜索正确的东西...

我在命令元素中添加了一个列表。 这是我更改后的 xsd:

<xs:element name="commands" maxOccurs="1" minOccurs="1">
      <xs:simpleType>
        <xs:list>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="InstallNothing" />
              <xs:enumeration value="InstallStateDatabase" />
              <xs:enumeration value="InstallStateServer" />
              <xs:enumeration value="InstallStoreDatabase" />
              <xs:enumeration value="InstallStoreServer" />
              <xs:enumeration value="InstallMaintenanceProgram" />
              <xs:enumeration value="InstallOther" />
            </xs:restriction>
          </xs:simpleType>
        </xs:list>
      </xs:simpleType>
    </xs:element>

使用它的示例 XML 是:

<commands>InstallNothing InstallStateDatabase InstallStateServer </commands>

最新更新