2011-11-23 78 views
1

xmlschema.Items xmlschema.Elements有什么区别?他们似乎完全回报不同的事物?我应该在什么时候使用?如果我只想简单地按顺序获取XSD中定义的所有元素,应该怎么做?我已经使用了.Items和.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"/> 

回答

3

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

Items集合是预验证;这些是在架构级定义的XmlSchemaObject;它们采用XML Schema源码顺序。

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

如果您需要源代码顺序中的元素,则只能通过Items集合来实现。

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

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

如果在模式级别定义的东西没有显示在Items集合中,那会是一个bug。我不得不说,我从来没有见过它 - 请仔细检查你所寻找的是否确实被定义为xsd:schema元素的子元素。

相关问题