XSD架构中的项目和元素之间有什么区别?

时间:2011-11-23 18:58:08

标签: c# xsd

xmlschema.Items xmlschema.Elements有什么区别?他们似乎完全回归了不同的东西?我什么时候应该使用?如果我只想简单地按顺序获取XSD中定义的所有元素,我该怎么办?我使用了.Items和.Elements方法,两者都给了我不同的结果,我不确定哪一个适合我的用途。

foreach(var entry in xmlschema.Elements)
            {
                 Console.WriteLine("{0}:{1}",entry.Key,entry.Value);
            }
 foreach (var obj in xmlschema.Items)
            {
                Console.WriteLine("{0}",obj.GetType());
            }

更新: - 为什么两者都没有拿起这些

<attribute name="ref" type="IDREF"/>
  <attribute name="sequenceID" type="integer"/>
<element name="Metadata" type="s:MetadataType" abstract="true"/>

1 个答案:

答案 0 :(得分:3)

Elements集合是一个Post Schema Validation Infoset(PSVI),它只捕获在模式级别定义的元素。 MSDN上的This link谈到了PSVI。

Items集合是预先验证的;那些是在模式级别定义的XmlSchemaObject;它们采用XML Schema源顺序。

关于使用前验证和后验证,这是一个需求问题。例如,如果要以“源”顺序遍历定义,那么您将遵循非PSVI;如果你想要的只是到达信息集,PSVI是你最好的选择;或者如果你必须能够处理加载但不编译的模式,那么你就会陷入非PSVI。

如果您想要源顺序中的元素,则只能通过Items集合执行此操作。

全局(架构级别)属性显示在Attributes集合下。

全局的所有内容都必须显示在Items集合中,但在Includes下显示的外部引用(xsd:include,xsd:import和xsd:redefine)除外。

如果在模式级别定义的内容未显示在Items集合中,那将是一个错误。我不得不说,我以前从未见过它 - 请仔细检查你正在寻找的东西是否确实被定义为xsd:schema元素的子代。

相关问题