99 votes

Balises requises non présentes lors de l'utilisation de l'assistant de liaison de données XML de Delphi

J'utilise le XML Data Binding Wizard en Delphi XE2 . Le schéma a exigé des balises de ce type :

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

Le problème est que si je n'ajoute pas d'éléments, par exemple à l'élément Values -groupe, il n'y aura pas de <Values> -et le fichier XML ne sera pas validé par rapport à la balise XSD . Cela ne poserait probablement pas de problème si l'interface fournissait une méthode pour "ajouter" l'option Values -tag.

Existe-t-il une manière standard de gérer cela, ou est-ce que j'utilise le code généré de manière incorrecte ?

En clair Est-ce qu'il y a tout d'une manière ou d'une autre, en utilisant le code de l'interface utilisateur. Data Binding Wizard pour obtenir le résultat suivant XML (ce qui est nécessaire pour valider en utilisant le schéma ci-dessus quand il n'y a pas de nœuds enfants), étant donné que HeaderType , ValuesType y EventsType sont de type complexe :

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

(Je sais qu'il y a d'autres problèmes similaires, comme le code généré par <xs:sequence> ne pas respecter l'ordre correct dans la finale XML -mais au moins pour celui-là, il y a une solution de contournement en insérant simplement les enfants dans le bon ordre. Je pense toujours que ce serait bien si Embarcadero fournirait une interface complète, qui tient compte d'un plus grand nombre de ces caractéristiques).

1voto

Hans Points 97

Je ne suis pas sûr de comprendre, mais peut-être que ce que vous recherchez est : 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>

Dites-moi si c'est d'accord.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X