【问题标题】:Use extension and normal attributes together in xsd在 xsd 中同时使用扩展和普通属性
【发布时间】:2018-06-12 09:43:04
【问题描述】:

我正在尝试进行映射,我需要使用:

  • Config.xxx.yyy.KeyPair[z].normalAttribute
  • Config.xxx.yyy.KeyPair[z]@extendAttribute

KeyPair 可以使用 0 到 x 次

  • 额外属性:KeyId、KeyType、ValidTo、Active
  • 普通属性:PrivateKey、PublicKey

但是当我尝试在 C# 中加载 xsd 文件时抛出错误:

System.Xml.Schema.XmlSchemaException: The type attribute cannot be present with either simpleType or complexType.

这里显示了我如何制作它的缩短版本,但它根本不起作用:

<xs:element name="Config">
  <xs:complexType>
    <xs:all>
      <xs:element name="xxx">
        <xs:complexType>
          <xs:all>
            <xs:element name="EncryptionKeys" type="yyy"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:element>

<xs:element name="yyy">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="KeyPair" type="KeyPairExtraTypes" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:attributeGroup ref="KeyPairAttributes"/>
          <xs:attributeGroup ref="KeyPairExtraTypes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:attributeGroup name="KeyPairAttributes">
  <xs:attribute name="PrivateKey" type="xs:string"/>
  <xs:attribute name="PublicKey" type="xs:string"/>
</xs:attributeGroup>

<xs:complexType name="KeyPairExtraTypes">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute type="xs:string" name="KeyId"/>
      <xs:attribute type="xs:string" name="KeyType" use="required"/>
      <xs:attribute type="xs:string" name="ValidTo" use="optional"/>
      <xs:attribute type="xs:bool" name="Active" use="required"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

【问题讨论】:

  • 它根本不起作用,因为yyy 是一个元素名称,因此您不能将其称为类型。我不知道这是问题的本质还是只是偶然。您确实没有正确解释您想要实现的目标:从非工作代码逆向工程需求非常困难。
  • 我会补充更多信息。

标签: c# xml validation xsd


【解决方案1】:

解决方案很简单。

<xs:element name="Config">
    <xs:complexType>
        <xs:all>
            <xs:element name="xxx">
                <xs:complexType>
                    <xs:all>
                        <xs:element name="EncryptionKeys">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="KeyPair" maxOccurs="unbounded">
                                        <xs:complexType>
                                            <xs:all>
                                                <xs:element name="PublicKey" type="xs:string"/>
                                                <xs:element name="PrivateKey" type="xs:string"/>
                                            </xs:all>
                                            <xs:attribute name="KeyId"/>
                                            <xs:attribute name="KeyType" type="xs:string" use="required"/>
                                            <xs:attribute name="ValidTo" type="xs:string"/>
                                            <xs:attribute name="Active" type="xs:boolean" use="required"/>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:all>
                </xs:complexType>
            </xs:element>
        </xs:all>
    </xs:complexType>
</xs:element>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 2016-07-17
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2018-07-30
    相关资源
    最近更新 更多