2012-10-01 26 views
82

Delphi XE2'deki XML Veri Bağlama Sihirbazı'nı kullanıyorum. şema bu tip etiketler gerektirmiştir:Delphi XML Veri Bağlama Sihirbazı'nı kullanırken gereken etiketler yok

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

sorun olduğunu ben mesela herhangi unsurları eklemek yoksa Değerler grubu, <Values> -tag olmayacak ve XML dosyası XSD'ye karşı doğrulama başarısız olacaktır. Arayüz, Değerler etiketini "eklemek" için bir yöntem sağlıyorsa, bu muhtemelen bir sorun olmaz.

Bunu işlemenin standart bir yolu var mı, yoksa oluşturulan kodu doğru bir şekilde mi kullanıyorum? basitçe koyun

, herhangi yolu orada yukarıdaki şema kullanarak doğrulamak için gereken budur (Aşağıdaki XML üretmek için, Wizard Bağlama Veri kodunu kullanarak, iş çevresinde veya başka yoktur HeaderType verilen hiçbir çocuğun düğümler) vardır, ValuesType ve EventsType complexType vardır:

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

kod <xs:sequence> nihai XML dosyasında doğru emrini uygulayan değil tarafından oluşturulan gibi (I benzer diğer konular vardır biliyorum ama en azından bunun için, çocukları doğru sıraya yerleştirerek bir çalışma var. .

+0

Sipariş verdiğinizde sorunun kökünü zaten öğrendiniz. Oluşturulan sınıf, XML nesne modeli etrafında bir dilsiz sarıcıdır; sadece sorulduğunda var olacak. Dize türleri ile bu yeterince kolaydır (sadece boş bir dize ekleyin) ancak karmaşık tipler için nil çalışıp çalışmadığından emin değilim. –

+0

Bu aslında tam olarak doğru değil. 'TXMLValuesType.AfterConstruction' kodu 'RegisterChildNode ('Value', TXMLValueType); FValue: = CreateCollection (TXMLValueTypeList, IXMLValueType, 'Değer'), IXMLValueTypeList; ; böylece Değer Öğelerinin (üst değerler-etiketinin altında) koleksiyonu var, bu da boş Değerler-etiketini oluşturmanın çok zor olduğunu . Boş Değer listesi, '' -tag – Randomeister

+1

@Randomeister - üretmek için 'SaveToFile' öğesini zorlamanızdan etkin bir şekilde sizi durduracaktır - XSD'nizdeki minOccurs =" 1 "özniteliğini deneyin: \t . Ayrıca, yerine kullanmayı deneyin. Bağlama sihirbazıyla (Delphi XE'de) iyi bir anlaşma yaptım ve herhangi bir sorunla karşılaşmadım - ancak sihirbazın siparişi ve zorunlu değerleri anlaması için türlerinizi ve niteliklerinizi doğru bir şekilde bildirdiğinizden emin olmanız gerekir. – Vector

cevap

1

Emin değilim anlamak için) Embarcadero dikkate bu özelliklerin daha sürer tam bir arayüz sağlamak olsaydı iyi olurdu düşünmek ama belki ne aradığınız geçerli: kullanmak

<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> 
= "isteğe bağlı"

Sorun olup olmadığını söyle.

+0

up. Aradığın şey bu mu? – Hans