मैं एक्सएमएल को ऑब्जेक्ट्स को पढ़ने और लिखने के लिए डेल्फी एक्सई या बाद में उन्नत आरटीटीआई सुविधाओं का उपयोग करने का प्रयास कर रहा हूं। अब तक मैं पूर्णांक, फ्लोट्स, तार, गणित प्रकार, सेट और कक्षाओं के साथ सफल रहा हूं लेकिन रिकॉर्ड को सही ढंग से आउटपुट या पढ़ नहीं सकता। लगता है कि रिकॉर्ड रिकॉर्ड संपत्ति के लिए एक उदाहरण (सूचक) हो रहा है।रिकॉर्ड मूल्य प्राप्त करने और सेट करने के लिए डेल्फी आरटीटीआई का उपयोग कैसे करें
//Outputs Properties To XML
procedure TMyBase.SaveToXML(node: TJclSimpleXMLElem);
var
child , subchild : TjclSimpleXMLElem ;
FContext : TRttiContext ;
FType : TRttiType ;
FProp : TRttiProperty ;
Value : TValue ;
MyObj : TMyBase ;
FField : TRttiField ;
FRecord : TRttiRecordType ;
Data : TValue ;
begin
FContext := TRttiContext.Create ;
FType := FContext.GetType (self.ClassType) ;
Child := node.Items.Add (ClassName) ;
for FProp in FType.GetProperties do begin
if FProp.IsWritable then begin
case FProp.PropertyType.TypeKind of
tkClass : begin
MyObj := TMyBase (FProp.GetValue (self).AsObject) ;
MyObj.SaveClass (Child.Items.Add (FProp.Name) , FContext) ;
end ;
tkRecord : begin
subchild := Child.Items.Add (FProp.Name) ;
FRecord := FContext.GetType(FProp.GetValue(self).TypeInfo).AsRecord ;
for FField in FRecord.GetFields do begin
>>> self is not the correct instance <<<
Value := FField.GetValue (self) ;
subchild.Items.Add (FField.Name).Value := Value.ToString ;
end;
end ;
else begin
Value := FProp.GetValue(self) ;
Child.Items.Add (FProp.Name).Value := Value.ToString ;
end;
end;
end ;
end ;
FContext.Free ;
end;
मुझे संदेह है कि यदि मैं मान सकता हूं कि मूल्य कैसे प्राप्त करें तो उन्हें सेट करना कोई समस्या नहीं होनी चाहिए। फिर सरणी पर, ओह लड़का!
अद्यतन: कृपया below देखें। (दृश्यता में सुधार के लिए अलग जवाब के रूप में माइग्रेट किया गया)।
कौन सा डेल्फी के संस्करण यहाँ संशोधित कोड है? – GolezTrol
इसका एक्सई संस्करण – Mitch
क्या कोई विशेष कारण है कि आप "कक्षाओं" के अंत में "रिकॉर्ड" को सहेजना चाहते हैं? यदि नहीं, तो ओमनीएक्सएमएल की जांच करें, इसमें एक * .XML फ़ाइल से/TPersistent वंशज को सहेजने और लोड करने की क्षमता है। http://www.omnixml.com/ – ComputerSaysNo