Delphi XMLデータバインディングウィザードの使用時に必要なタグが存在しない


99

で使用しXML Data Binding WizardていDelphi XE2ます。スキーマには、このタイプの必須タグがあります。

<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-groupに要素を追加しない場合、-tagがなく<Values>、XMLファイルがに対する検証に失敗することXSDです。インターフェースがValues-タグを「追加」するためのメソッドを提供している場合、これはおそらく問題にはなりません。

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

簡単に言えば存在する、任意のコードを使用して、ワークアラウンド又はそうでなければ、方法は、Data Binding Wizard以下を生成するために、XML所与の(子ノードが存在しない場合に上記のスキーマを使用して検証するために必要とされるものである)HeaderTypeValuesTypeおよびEventsType複合型のものです:

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

<xs:sequence>最終的なXMLファイルで正しい順序を強制しないことによって生成されたコードなど、他にも同様の問題があることは知っていますが、少なくともその問題については、単純に子を正しい順序で挿入することによる回避策があります。Embarcaderoこれらの機能の多くを考慮に入れている完全なインターフェースを提供するのは良いことです。


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

これは実際にはまったく真実ではありません。(親のValues-tagの下にある)Value-itemsのコレクションが存在するようにTXMLValuesType.AfterConstruction読み取るRegisterChildNode('Value', TXMLValueType); FValue := CreateCollection(TXMLValueTypeList, IXMLValueType, 'Value') as IXMLValueTypeList;ためのコード。これにより、空のValues-tagを作成することが非常に難しくなります。空の値リストが効果的に強制するからあなたを停止しますSaveToFile生成するために<Values />-タグ
Randomeister

3
@Randomeister-XSDのminOccurs = "1"属性を試してください:<xs:all maxOccurs = "1">。また、<xs:all>の代わりに<xs:sequence>を使用してみてください。私はバインディングウィザード(Delphi XEで)をうまく処理して問題は発生していませんが、ウィザードが順序と必須の値を理解できるように、型と属性を正しく宣言していることを確認する必要があります。
2013年

回答:


1

よくわかりませんが、多分あなたが探しているものは:use = "optional"

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

よろしければ教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.