2012-10-01 11 views
82

私は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>タグはなく、XMLファイルはXSDに対して検証に失敗します。これはおそらく、インタフェースがValuesタグを "追加"するためのメソッドを提供していれば問題ではないでしょう。

これを処理する標準的な方法はありますか、または生成されたコードを正しく使用していますか?単に入れ

任意方法は、場合が上記のスキーマを使用して検証するために必要とされるものである(以下のXMLを生成するために、ウィザードを結合データからコードを使用して、ワークアラウンド又はそうでなければ、あります

<MyReport> 
    <Header /> 
    <Values /> 
    <Events /> 
</MyReport> 

(私は、<xs:sequence>によって生成されたコードは、最終的なXMLファイルに正しい順序を強制ではないような他の同様の問題は、そこにいることを知っている:子ノードはHeaderType、ValuesTypeとEventsTypeはcomplexTypeのである与えられた、)ではありませんしかし、少なくともそれについては、子供たちを正しい順序で挿入するだけで回避することができます。 。

+0

ご注文いただいた時点で、問題の根本的な問題を既に発見しています。生成されるクラスは、XMLオブジェクトモデルの周りのダムラッパーです。それは尋ねられたときにのみ存在します。文字列型の場合、これは簡単です(空の文字列を追加するだけですが)複雑な型の場合は、nilが機能するかどうかはわかりません。 –

+0

これは実際にはあまり真実ではありません。 'TXMLValuesType.AfterConstruction'のコードは' RegisterChildNode( 'Value'、TXMLValueType); を読み取ります。 IXMLValueTypeListとしてFValue:= CreateCollection(TXMLValueTypeList、IXMLValueType、 'Value'); Valueタグ(親Valuesタグの下に)のコレクションが存在するため、空のValuesタグを作成するのが難しくなります。空のValue-listは 'SaveToFile'に' '-tag – Randomeister

+1

@Randomeisterを生成させることを効果的に阻止します.XSDのminOccurs =" 1 "属性を試してください:\t 。また、の代わりにを使用してください。私はバインディングウィザード(Delphi XE)をよく扱っていますが、問題は発生していませんが、ウィザードで順序と必須値を理解できるように型と属性を正しく宣言する必要があります。 – Vector

答えて

1

わからないが、理解するために)エンバカデロは、アカウントにこれらの機能の多くを取る完全なインタフェースを、提供する場合、それはいいだろうと思いますが、おそらくあなたが探していることは次のとおりです。使用

<xs:element name="MyReport" type="MyReportType" /> 
<xs:complexType name="MyReportType"> 
    <xs:all> 
    <xs:element name="Header" type="HeaderType" use="optional" /> 
    <xs:element name="Values" type="ValuesType" use="optional" /> 
    <xs:element name="Events" type="EventsType" use="optional" /> 
    </xs:all> 
</xs:complexType> 
=「オプション」

大丈夫か教えてください。

+0

up。あなたが探していたものですか? – Hans

関連する問題