我在Delphi XE2中使用XML數據綁定向導。 架構已經不需要這種類型的標籤:使用Delphi XML數據綁定向導時不存在所需標記
<xs:element name="MyReport" type="MyReportType" />
<xs:complexType name="MyReportType">
<xs:all>
<xs:element name="Header" type="HeaderType" />
<xs:element name="Values" type="ValuesType" />
<xs:element name="Events" type="EventsType" />
</xs:all>
</xs:complexType>
的問題是,如果我不添加任何例如元素值 - 組,將不會有<Values>
-tag,並且XML文件將無法通過XSD進行驗證。如果界面提供了一種「添加」Values-tag的方法,這可能不會成爲問題。
是否存在處理此問題的標準方法,或者我是否正確使用生成的代碼?
簡而言之,有任何方式,變通或以其它方式使用從數據綁定向導的代碼,產生以下XML(這是需要什麼時,有使用上述架構驗證給出HeaderType沒有子節點),ValuesType和EventsType是複雜類型的:
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
(我知道還有其他類似的問題,就像<xs:sequence>
在最終的XML文件沒有強制執行正確的順序生成的代碼,但至少對於那個人來說,通過簡單地將孩子插入正確的順序就可以解決問題認爲這將是很好,如果Embarcadero公司將提供完整的接口,這需要更多的這些特徵考慮在內)
在提到排序時,您已經發現問題的根源。生成的類是XML對象模型的愚蠢包裝器;它只會在被要求時才存在。對於字符串類型,這很容易(只需添加一個空字符串),但對於複雜類型,我不確定是否可以工作。 –
這其實並不完全正確。 「TXMLValuesType.AfterConstruction」的代碼爲 RegisterChildNode('Value',TXMLValueType); FValue:= CreateCollection(TXMLValueTypeList,IXMLValueType,'Value')as IXMLValueTypeList;' 所以存在Value-items集合(在父值之下),這就是爲什麼很難創建空的Values-tag 。空值列表將有效地阻止您強制'SaveToFile'生成' '-tag –
Randomeister
@Randomeister - 在您的XSD中嘗試minOccurs =「1」屬性:\t。此外,請嘗試使用而不是。我已經在綁定向導(Delphi XE)中做了很多工作,並且沒有遇到任何問題 - 但是您必須確保正確地聲明您的類型和屬性,以便嚮導理解順序和強制值。 –
Vector