डेल्फी 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>

समस्या यह है कि अगर मैं किसी भी तत्व को उदाहरण के लिए -group में Valuesनहीं <Values>जोड़ता, तो कोई -tag नहीं होगा, और XML-फ़ाइल के विरुद्ध सत्यापन विफल हो जाएगा XSD। यह शायद एक समस्या नहीं होगी अगर इंटरफ़ेस Values-tag को "जोड़ने" के लिए एक विधि प्रदान कर रहा था ।

क्या इसे संभालने का एक मानक तरीका है, या क्या मैं उत्पन्न कोड का सही तरीके से उपयोग कर रहा हूं?

सीधे शब्दों में कहें, क्या कोई तरीका है, काम-के आसपास या अन्यथा, कोड का उपयोग करके Data Binding Wizard, निम्नलिखित का उत्पादन करने के लिए XML(जो कि ऊपर दिए गए स्कीमा का उपयोग करने के लिए मान्य करने की आवश्यकता है जब कोई बच्चे नोड्स नहीं हैं), दिए गए HeaderType, ValuesTypeऔरEventsType जटिल हैं :

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

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


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

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

3
@Randomeister - अपने XSD में minOccurs = "1" विशेषता आज़माएं: <xs: सभी maxOccurs = "1">। इसके अलावा, <xs: अनुक्रम> के बजाय <xs: all> का उपयोग करके देखें। मैंने बाध्यकारी विज़ार्ड (डेल्फी एक्सई में) के साथ अच्छा काम किया है और किसी भी समस्या का सामना नहीं किया है - लेकिन आपको यह सुनिश्चित करना होगा कि आप अपने प्रकार और विशेषताओं को सही ढंग से घोषित करें ताकि विज़ार्ड आदेश और अनिवार्य मूल्यों को समझे।
वेक्टर

जवाबों:


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>

बताओ तो ठीक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.