引用的 XmlSchemaElement 中的 IsAbstract 值不正确

Incorrect IsAbstract value in a referenced XmlSchemaElement

我正在使用包含抽象元素定义的 XML 模式,例如

<element name="AbstractX" type="some:Type" abstract="true"/>

XmlSchemaSet 中加载此架构时,我可以在其 GlobalElements 中找到此元素,并看到它的 IsAbstract 属性 设置为 true.到目前为止一切顺利。

但是,这个元素也被引用在这样的类型中

<complexType name="ReferencingX">
    <complexContent>
        <extension base="some:otherBaseType">
            <sequence>
                <element ref="some:AbstractX"/>
            </sequence>
        </extension>
    </complexContent>
</complexType>

在解析的 XmlSchemaSet 中,当我通过复杂类型定义导航到元素时,它已将 IsAbstract 设置为 false

这有什么原因吗,还是 System.Xml.Schema 中的错误?

(为了简洁起见,我简化了 XSD,所讨论的架构是 AIXM

不,这不是错误。

您在代码中看到的是对(抽象)元素的引用;引用不能标记为抽象(部分 3.3.2 XML Schema Part 1,抽象仅在模式是元素的父级时适用)。

您只需要:

  • 检查是否el.RefName.IsEmpty;在您的情况下,它不是(因为您使用了 ref 属性)。
  • 导航到 GlobalElements[el.RefName] 中的适当定义,将值转换为 XmlSchemaElement,然后检查其 IsAbstract 属性(在您的情况下为真)。

这应该可以解决您的问题。