引用的XmlSchemaElement

时间:2016-03-11 14:44:00

标签: c# .net xsd

我正在使用包含抽象元素定义的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

1 个答案:

答案 0 :(得分:1)

不,这不是一个错误。

您在代码中看到的是(抽象)元素的引用;引用不能标记为abstract(section 3.3.2 XML Schema Part 1,abstract仅在schema是元素的父级时才适用)。

您只需要:

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

这可以解决您的问题。