【问题标题】:what is the difference between Items and Elements in an XSD Schema?XSD 架构中的项目和元素有什么区别?
【发布时间】:2012-01-05 01:34:45
【问题描述】:

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"/>

【问题讨论】:

    标签: c# xsd


    【解决方案1】:

    Elements 集合是一个后架构验证信息集 (PSVI),它仅捕获在架构级别定义的元素。 MSDN 上的This link 谈到了 PSVI。

    Items 集合是预验证;这些是在架构级别定义的XmlSchemaObjects;它们按 XML Schema 源顺序排列。

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

    如果您希望元素按源顺序排列,则只能通过 Items 集合来实现。

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

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

    如果在架构级别定义的内容未显示在 Items 集合中,那将是一个错误。我不得不说,虽然我以前从未见过它 - 请仔细检查您要查找的内容是否确实定义为 xsd:schema 元素的子元素。

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 2019-12-19
      • 2011-04-18
      • 2014-05-04
      相关资源
      最近更新 更多