2011-11-23 29 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元素的子元素。

相關問題