2012-10-01 18 views
82

का उपयोग करते समय आवश्यक टैग मौजूद नहीं हैं I डेल्फी XE2 में 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 (निर्माण करने के लिए है जो जब वहाँ ऊपर स्कीमा का उपयोग कर प्रमाणित करने के लिए जरूरत है काम के आसपास या अन्यथा कोई भी बच्चा नोड्स), HeaderType दी हैं, ValuesType और EventsType complexType के होते हैं:

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

(मुझे पता है कि अन्य इसी तरह के मुद्दे हैं, कोड की तरह से <xs:sequence> अंतिम एक्सएमएल फ़ाइल में सही क्रम को लागू नहीं उत्पन्न, लेकिन कम से कम उस के लिए, बच्चों को सही क्रम में बस डालने के द्वारा एक कार्य-आसपास है। मैं अभी भी लगता है कि यह अच्छा होगा अगर Embarcadero एक पूरा इंटरफेस, जिसके खाते में इन सुविधाओं में से अधिक लेता है प्रदान करेगा होगा)

+0

ऑर्डर करने के दौरान आपने पहले ही इस मुद्दे की जड़ खोज ली है। जेनरेट क्लास एक्सएमएल ऑब्जेक्ट मॉडल के चारों ओर एक गूंगा रैपर है; यह पूछे जाने पर ही अस्तित्व में रहेगा। स्ट्रिंग प्रकारों के साथ यह काफी आसान है (केवल खाली स्ट्रिंग जोड़ें) लेकिन जटिल प्रकारों के लिए मुझे यकीन नहीं है कि शून्य काम करेगा या नहीं। –

+0

यह वास्तव में काफी सच नहीं है। 'TXMLValuesType.AfterConstruction' के लिए कोड 'रजिस्टरChildNode (' Value ', TXMLValueType) पढ़ता है; FValue: = CreateCollection (TXMLValueTypeList, IXMLValueType, 'Value') IXMLValueTypeList के रूप में; ' इसलिए वैल्यू-आइटम (मूल मान-टैग के अंतर्गत) का संग्रह मौजूद है, जो कि खाली मान-टैग बनाने के लिए इतना कठिन बनाता है । खाली वैल्यू-सूची प्रभावी रूप से आपको ' '-tag – Randomeister

+1

@ रैंडोमिस्टर का उत्पादन करने के लिए' SaveToFile' को मजबूर करने से रोकती है - अपने एक्सएसडी में minOccurs =" 1 "विशेषता का प्रयास करें: \t । साथ ही, के बजाय का उपयोग करने का प्रयास करें। मैंने बाइंडिंग विज़ार्ड (डेल्फी एक्सई में) के साथ एक अच्छा सौदा किया है और किसी भी समस्या का सामना नहीं किया है - लेकिन आपको यह सुनिश्चित करना होगा कि आप अपने प्रकार और विशेषताओं को सही तरीके से घोषित करें ताकि विज़ार्ड आदेश और अनिवार्य मानों को समझ सके। – 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

ऊपर। क्या आप यही खोज रहे थे? – Hans

संबंधित मुद्दे