引用的 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 属性(在您的情况下为真)。
这应该可以解决您的问题。
我正在使用包含抽象元素定义的 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 属性(在您的情况下为真)。
这应该可以解决您的问题。