1

也许我错过了一些东西,但是谁能向我解释一下XmlSchemaElement类的以下属性的含义和区别:

  1. mlSchemaElement.ElementSchemaTypeX和有什么区别XmlSchemaElement.ElementType
  2. 之间有什么区别QualifiedName, SchemaTypeName and RefName
  3. QualifiedName, SchemaTypeName and RefName相互之间有什么关系?什么时候SchemaTypeName.IsEmpty == true,是这个意思RefName.IsEmpty == false吗?
  4. 是否有可能全部都是*Names嵌入式Empty的 ComplexType,这意味着什么?

一般来说,我需要解析 xsd 并将结果映射到内部结构,所以我需要一些规则,它允许我生成不同类型的对象。假设我已经提供if (SchemaTypeName.IsEmpty)了所有限制。ElementSchemaTypeSimpleType

4

1 回答 1

1
  1. XmlSchemaElement.ElementType自 2.0 以来已过时,否则它们是相同的。
  2. QualifiedName表示元素的实际限定名称,因为 XML 实例文档中的相应 XML 元素将具有它。SchemaTypeName表示赋予元素的类型的名称(可以是内置的 XSD,例如int或用户定义的类型,例如mine)。RefName表示粒子虽然是一个元素,但实际上是对架构中其他地方的全局定义元素的引用(见下文)

    <xsd:element name="Global" type="xsd:string"/>
    <xsd:group name="some">
        <xsd:sequence>
            <xsd:element name="Local" type="xsd:int"/>
            <xsd:element ref="Global" minOccurs="0"/>
        </xsd:sequence>
    </xsd:group>
    
  3. 不幸的是,不一定是真的;例如,如果没有与元素关联的类型(默认情况下表示 xsd:anyType)。

  4. 不,见上文(anyType)。

此外,事情变得更加复杂。如果您在 XSD 中任何地方都没有引用的组下有元素粒子,那么有趣的部分是该组下元素粒子的 PSVI 属性不会被填充......我从来没有费心去弄清楚这是否是一个功能或一个错误......我所做的是构建一个使用所有这些属性并尝试处理它找到的一点信息的访问者......对我来说,这种方法也证明了对.NET修复的弹性年...

于 2013-07-25T18:04:05.410 回答