PROGRAM Mutex_OneAppXML_DOM_API_Transform4Tester; //sign:max: MAXBOX8: 16/10/17 09:54:18 //http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mapping_Between_XML_Nodes_and_Data_Packet_Fields //C:\maXbox\backupstick2017\closures_mat\delphisource\Win32\websnap\Xmlxform.pas {@To get access weather thingspeak API you need an own API key whatever account you chose!!, API keys enable you to write data to a channel or read data from a private channel. API keys are auto-generated when you create a new channel.} CONST // MUTEX = 'IBZ2018'; TSPEAKFEED = 'https://api.thingspeak.com/channels/%s/feeds.json?api_key=%s&results=%d'; APIKEY3 = 'RLKXB8GMPDEET8NR'; //read only - not a keysigningkey! function myMutex(aobj: TObject; ainit: bool; aname: PChar): Longint; external 'CreateMutexA@kernel32.dll stdcall'; const BOOKSXML = 'C:\maXbox\maxbox3\maxbox3\maXbox3\examples\books.xml'; MENTORPATH = 'C:\maXbox\maxbox3\maxbox3\maXbox3\examples\'; const TestXML = '' + '' + '' + '' + 'John Smith' + '
123 Main Street
'+ 'Sometown' + 'NY' + '12345' + '
' + '' + 'Jane Doe' + '
456 Scenic View Blvd
'+ 'Richtown' + 'CT' + '23456' + '
' + '
' + '
'; Sample2XSL = '' + ''+ ''+ ''+ 'Hello maXbox XSL'+ ''+ '' + 'In Edit Mode'+ ''+ ''+ 'In View Mode'+ ''+ ''; DATASETXML = ''+ ''+ ''+ ''+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ 'test 1'+ ''+ ''+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ 'test 2'+ ''+ ''+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ 'test 3'+ ''+ ''+ ''; var memo3: TMemo; txml: TXMLDocument; { procedure TForm1Button1Click(Sender: TObject); begin Memo3.Clear; ParseXMLToMemo; end; } Function CreateEmptyXMLDocument(Rootname:AnsiString): TXMLDocument; Var aXmlDoc: TXMLDocument; adoms: widestring; begin // RegisterMethod('Constructor Create2( AOwner : TComponent);'); // RegisterMethod('Constructor Create( const AFileName : DOMString)'); //aXmlDoc := TXMLDocument.Create(BOOKSXML); aXmlDoc := TXMLDocument.Create2(self); axmldoc.LoadFromFile(BOOKSXML) axmldoc.active:= true; axmldoc.DOMVendor writeln(itoa(axmldoc.ChildNodes.getcount)); //writeln(itoa(axmldoc.DocumentElement.getAttributeNodes.getcount)); axmldoc.savetoXML(adoms) writeln(adoms) writeln(axmldoc.NodeIndentStr ) Result := aXmlDoc; with result do begin Options := []; ParseOptions := []; FileName := 'DATASETXML3.xml'; //savetoXML(adoms) //savetofile(exepath+'xmlfile.xml') end; aXmlDoc.free; End; procedure TMainFormXMLRatesParseStartElement(Sender: TObject; const AName: string; const Attributes: TStrings); var cur: string;// = ''; // für das Währungskürzel rate: string;// = ''; // für den Wechsel-Faktor sql: string;// = ''; s: String; i: integer;// = 0; begin // wird ein Cube Element geparst? if AName = 'Cube' then begin with Attributes do begin // enthält es ein Attribute time? i := IndexOfName('time'); if i = 0 then begin // Zeitwert als string ablegen - Format: YYYY-MM-DD //FTime := ValueFromIndex[i]; Exit; end; // ist ein currency Attribut vorhanden i := IndexOfName('currency'); if i >= 0 then begin // dann den Wert festhalten cur := ValueFromIndex[i]; i := IndexOfName('rate'); if i >= 0 then begin // ... und den Faktor rate auslesen - (Punkt ist Dezimaltrennzeichen) rate := ValueFromIndex[i]; // string FTime in Datum konvertieren und dieses als String mit // Punkt als Dezimaltrennzeichen in s ablegen //Str(ScanDateTime('YYYY-MM-DD', FTime), s); // SQL-Anweisung erzeugen sql := 'insert into rates(time,cur,rate) values(%s,''%s'',%s);'; // ... mit Werten bestücken sql := Format(sql, [s, cur, rate]); // und der SQLList hinzufügen //Sqlite3Dataset1.SQLList.Add(sql); end; end; end; end; end; procedure TestWithXMLEasy; var Doc, Nodes, ChildNodes, Node, x : OleVariant; i, at: integer; s: string; begin // Create a COM object If you have MSXML 4: //Doc := Sys.OleObject('Msxml2.DOMDocument.4.0'); // If you have MSXML 6: Doc:= CreateOleObject('Msxml2.DOMDocument.6.0'); writeln('var data size: '+itoa(VarDataSize(Doc))) Doc.async := false; // Load data or const from a file // We use the file created earlier if fileExists(BooksXML) then Doc.load(BooksXML) else Doc.loadXML(TestXML); x:= doc.documentElement.childNodes; for i:= 0 to x.length-1 do writeln(x.item[i].nodename +': '+x.item[i].text+' '); //} // Report an error, if, for instance, the markup or file structure is invalid if Doc.parseError.errorCode <> 0 then begin s := 'Reason:' + #9 + Doc.parseError.reason + #13#10 + 'Line:' + #9 + VarToStr(Doc.parseError.line) + #13#10 + 'Pos:' + #9 + VarToStr(Doc.parseError.linePos) + #13#10 + 'Source:' + #9 + Doc.parseError.srcText; // Post an error to the log and exit writeln('Cannot parse the document. '+ s); Exit; end; end; procedure TForm1ParseXMLToMemo; var Doc: TALXMLDocument; //IXMLDocument; aRoot: TAlXMLNode; //IXMLNode; PersonList: TAlXMLNodeList; //IXMLNodeList; Person: TAlXMLNode; //IXMLNode; i: Integer; begin Doc:= TALXMLDocument.create; if fileExists(BooksXML) then Doc.loadfromFile(BooksXML, false) else Doc.loadfromXML(DATASETXML, false); //Doc.loadfromXML(TestXML, false); Doc.Active := True; i:= 0; aRoot := Doc.DocumentElement; // Get if Assigned(Doc) then begin writeln(botostr(doc.IsEmptyDoc)) if aroot.haschildnodes then writeln('childnodes: '+itoa(aRoot.childnodes.count)); end; //PersonList := Root.ChildNodes['people'].ChildNodes; //PersonList := Root.ChildNodes['people']; //Person:= aRoot.ChildNodes.findnode('people'); Personlist:= aRoot.ChildNodes; Person := PersonList.First; //Person.nextsibling; while Assigned(Person) do begin inc(i) writeln('assigned, childnodes'+itoa(i)+':' +botostr(person.HasChildNodes)) with Memo3.Lines do begin Add(Person.attributes['name']); // Memo3.Lines.Add(Person.ChildValues['address']); Add(Person.attributes['address']); Add(person.nodename+':'); Add(Person.attributes['author']); //Add(person.childnodes[3].attributes['author']) Add(person.childnodes[0].nodevalue) Add(person.childnodes[1].nodevalue) {Add(Person.attributes['city']); Add(Person.attributes['state']); Add(Person.attributes['zip']);} Person:= Person.NextSibling; end; end; Doc.free; end; var axmlmemo: TMemo; procedure Createform3; var aform: TForm; begin aform:= getform2(900,400,clblue,'XMLDocTest') ; with aform do begin memo3:= TMemo.create(aform); memo3.parent:= aform; memo3.scrollbars:= true; memo3.font.size:= 18; memo3.setbounds(10,10,360,340) axmlmemo:= TMemo.create(aform); axmlmemo.parent:= aform; axmlmemo.scrollbars:= true; axmlmemo.font.size:= 16; axmlmemo.color:= clYellow; axmlmemo.wordwrap:= false; //scrollbars:= ssvertical; axmlmemo.scrollbars:= ssboth; axmlmemo.setbounds(410,10,450,340) end; end; procedure ShowXml(aXml: TXmlVerySimple); var Stream: TMemoryStream; begin Stream:= TMemoryStream.Create; try aXml.SaveToStream(Stream); Stream.Position:= 0; writeln('stream.size: '+itoa(stream.size)) axmlmemo.Lines.LoadFromStream(Stream); axmlmemo.text:= aXml.Text; finally Stream.Free; end; end; procedure SetXMLtoMemo(self: TObject); var Xml: TXmlVerySimple; astream: TStringStream; //mymemo.lines.savetofile(ExePath+'\examples\mymemomemoire.txt'); {mymemo.lines.SaveToFile(selectedFile); Stat.simpletext:= selectedFile+ ' has been saved';} begin // Load XML from Memo1 Xml:= TXmlVerySimple.Create; //MemoToXml(Xml); //Xml.LoadfromFile(BOOKSXML) ; //'example.xml'); astream:= TStringstream.create('') StringtoStream(TestXML{DATASETXML}, astream) writeln('stream.size: '+itoa(astream.size)) aStream.Position:= 0; Xml.LoadfromStream(astream) //Xml.LoadfromFile('C:\maXbox\TestApp2\maxbox2\maxbox2\source_2007\maxbox29\mx4\mx4_v38\mx4\source\uPSI_niSTRING.xml') ; //writeln('llllllllll '+xml.text) ShowXML(xml) Xml.Free; astream.Free; //mBtnSave.Enabled := False; //mBtnLoad.Enabled := True; //mymemo.Text:= EXEPATH+XMLSAVEPATH+ ' saved.'; end; function GetXMLData(DataSet: TClientDataSet): string; var Stream: TStringStream; begin Stream := TStringStream.Create(''); try DataSet.SaveToStream(Stream, dfXML); Result := Stream.DataString; finally Stream.Free; end; end; function CreateNestedTransform(Owner: TComponent; const Name: string): TXMLTransform; begin Result := TXMLTransform.Create(Owner); //Result.SetSubComponent(True); Result.Name := Name; end; //********************************* DOM ***************************** procedure XSLProcessortransform(); var xslt, xslDoc, xslProc, xmlDoc, myerr: OleVariant; begin xslt := CreateOleObject('Msxml2.XSLTemplate.6.0'); xslDoc := CreateOleObject('Msxml2.FreeThreadedDOMDocument.6.0'); //var xslProc; xslDoc.async := false; xslDoc.loadXML(Sample2XSL) //('sample2.xsl'); if (xslDoc.parseError.errorCode <> 0) then begin myErr := xslDoc.parseError; writeln('You have parse error ' + myErr.reason); end else begin xslt.stylesheet := xslDoc; xmlDoc := CreateOleObject('Msxml2.DOMDocument.6.0'); xmlDoc.async := false; xmlDoc.load(BOOKSXML); if (xmlDoc.parseError.errorCode <> 0) then begin myErr := xmlDoc.parseError; writeln('You have error ' + myErr.reason); end else begin xslProc := xslt.createProcessor(); xslProc.input := xmlDoc; xslProc.transform(); writeln(xslProc.output); end end; //} end; function TXMLTransformXML (const SourceXML: string; const ATransformationFile: string): string; var SrcDom: IDOMDocument; TransDom: {THTTPParser} IDOMDocument; begin Result := ''; TransDom := nil; SrcDom := nil; if SourceXml <> '' then // SrcDom := LoadDocFromString(SourceXML); if ATransformationFile <> '' then //TransDom := LoadDocFromFile(ATransformationFile) else {if FTransformationFile <> '' then TransDom := LoadDocFromFile(FTransformationFile) else TransformError(SMissingTransform); if (TransDom <> nil) and (SrcDom <> nil) then Result := DoTransForm(SrcDom, TransDom, FEmptyDestinationDocument);} end; //********************************* CDS ***************************** procedure CreateCDSfromXML(Sender: TObject); var Cds1, Cds2: TClientDataSet; FieldDef: TFieldDef; fldLastName: TField; Index, i: integer; aNestedDataSet: TDataSet; adsf: TDataSetfield; CustomerAddressRef: TReferenceField; XMLTransform: TXMLTransformProvider; XMLTransform1: TXMLTransform; //TCustomProvider; TDCOMConnection exp: TExprParser; Field: TField; iVERField: TDatasetfield; begin cds1:= TClientDataSet.create(self); //TComponent(cds1).name:= 'DSMaster2'; //cds.FileName := ExtractFilePath(Application.ExeName) + 'nesteddata.xml'; cds1.FileName := MENTORPATH + 'cdsfromxml2trans.xml'; //openbrowser(MENTORPATH + 'nesteddata22.xml') // CDS.LoadFromFile('.\input.cds'); //CDS.SaveToFile('.\output.xml', dfXMLUTF8); // GetFieldInfo //XMLTransform.applyupdates1 //XMLTransform.execute savetofile(DATASETXML,MENTORPATH+ 'cdsfromxml1.xml',false); //opendoc(MENTORPATH+ 'cdsfromxml1.xml') XMLTransform1:= TXMLTransform.create(self); //function TransformXML(const SourceXml: string; // const ATransformationFile: string = ''): string; XMLTransform1.SourceXMLFile:= MENTORPATH+ 'cdsfromxml1.xml'; //XMLTransform1.TransformXML(MENTORPATH+ 'cdsfromxml1.xml', // MENTORPATH+'cdsfromxmlToDp.xtr') ; // const ATransformationFile: string = ''): string; XMLTransform1.TransformationFile:= MENTORPATH+'cdsfromxmlToDp.xtr'; //writeln(XMLTransform1.data) writeln(xmltransform1.ResultString) // XMLTransform1.SourceXML:= with cds1 do begin Active := false; //cds1.ProviderName:= XMLTransform1; //cds1.loadfromfile(MENTORPATH+ 'cdsfromxml1datapack.xml') cds1.SetProvider(XMLTransform1); active:= true; cds1.XMLData := XMLTransform1.Data; writeln('dataset length '+itoa(length(cDS1.Data))) writeln('length recordc '+itoa((cDS1.recordcount))) Writeln('Size of Record '+intToStr(cDS1.recordsize)) //cds1.loadfromfile(MENTORPATH+ 'cdsfromxml1.xml') cds1.XMLData:= DATASETXML; // cds1.SavetoFile(cds1.FileName, dfXMLUTF8); //DisableControls; //(cds1.FieldByName ('Population') as //TFloatField).DisplayFormat := '###,###,###'; //for it := 0 to cds1.FieldCount - 1 do // cds1.Fields[It].Alignment := taCenter; //EnableControls(0); end; {cds1.FieldDefs.Clear; cds1.FieldDefs.Add ('TABELLA' , ftString, 50, False); cds1.FieldDefs.Add ('VALORI' , ftString, 50, False); cds1.FieldDefs.Add ('Invoice Data' , ftDate, 0, False); cds1.FieldDefs.Add ('NameX' , ftstring, 50, False); //cds1.Fielddefs.Add('Items',ftdataset,0,false); } //cds1.Fields.Add('Items',ftdataset,0,false); {FieldDef := ClientDataSet1.FieldDefs.AddFieldDef; FieldDef.Name := 'Name'; FieldDef.DataType := ftString; FieldDef.Size := 20; FieldDef.Required := True; } if FileExists(cds1.FileName) then // cds1.Open else begin //cds1.FieldDefs.Clear //cds1.CreateDataSet; //cds2.createdataset end; //cds1.Open; cds1.FieldDefs.Update; cds1.first; cds1.Edit; // cds1.FieldByName('Name').AsString := 'Test'; cds1.Fields[1].AsString := 'Testtabella'; cds1.Fields[2].AsString := '4nameTest2'; cds1.Fields[3].AsDatetime := date; cds1.Fields[4].AsDatetime := date; cds1.Post; // } //cds1.applyupdates(0) cds1.LogChanges := False; //cds1.close; //cds1.open; writeln('dataset length '+itoa(length(cDS1.Data))) writeln('length recordc '+itoa((cDS1.recordcount))) Writeln('Size of Record '+intToStr(cDS1.recordsize)) cds1.SavetoFile(cds1.FileName, dfXMLUTF8); { cds1.FieldDefs.Add ('XXhhDetail2hjj' , ftstring, 50, False); cds1.FieldDefs.Update; cds1.Edit; // cds1.FieldByName('Name').AsString := 'Test'; cds1.Fields[3].AsString := 'XXDetails2'; cds1.Post; } for Index := 0 to CDS1.Fields.Count- 1 do writeln(CDS1.Fields[Index].Asstring); fldLastName := cds1.FindField('Name'); cds1.Close cds1.free; XMLTransform1.Free; {with TStringField.Create(Self) do begin Name := 'TalentByVideosName'; //FieldKind := fklookup; FieldName := 'Name'; Size := 50; //DataSet := TDataset(ClientDataSet1); KeyFields := 'TalentID'; //LookupDataSet := TalentCDS; LookupKeyFields := 'ID'; LookupResultField := 'Name'; end; //ID } { with TDataSetField.Create(Self) do begin Name := 'VideosCDSTalentByVideo'; FieldName := 'TalentByVideo'; DataSet := VideosCDS; end; } //opendoc(MENTORPATH + 'nesteddata.xml') end; //********************************* API ***************************** function GetGeoWeatherAL(const location: string; const UrlRestAPI, cid, APIKey: ansistring; res: byte): string; var alHTTP: TALWinHttpClient; //TALHTTPClient ; asyn: TSynwInfo; dl: TDownloadURL; begin alHTTP:= TALWinHttpClient.Create; try alhttp.requestmethod:= HTTPmt_Get; try if cid = '' then result:= alHTTP.get1(Format(UrlRestAPI,[APIKey,res])) else result:= alHTTP.get1(Format(UrlRestAPI,[cid,APIKey,res])); writeln(alhttp.head(Format(UrlRestAPI,[cid,APIKey,res]))); writeln(alhttp.url); writeln('name: '+alhttp.username); // ALGmtDateTimeToRfc822Str // writeln('test get: '+Format(UrlRestAPI,[cid,APIKey])) except //if something wrong try using a backup service server. //writeln('html back: '+GetURLAsString('http://api.openweathermap.org')); writeln('RESTOWMap Exception2: '+Gethtm(UrlRestAPI)) writeln(ExceptiontoString(exceptiontype,exceptionparam)) end; //lStream.Seek(0,0); //result:= 'GEO_Report: '+UTF8ToString(lStream.ReadString(lStream.Size)); result:= 'maxboxthings back: '+result; finally alHTTP.Free; end; end; //********************************* ADO ***************************** Function RecordsetToXML22(const Recordset: variant): string; var RS: Variant; Stream: TStringStream; begin Result := ''; //if Recordset = unassigned then Exit; Stream:= TStringStream.Create(''); try RS:= CreateOleObject('ADODB.Recordset'); RS:= Recordset; RS.Save(TStreamAdapter.Create(stream,soReference) as IUnknown, adPersistXML); Stream.Position := 0; Result:= Stream.DataString; finally Stream.Free; end; end; Procedure SetADOSETAccess2Recordset; var adoquery: TAdoDataSet; i, z: integer; begin adoquery:= TAdoDataSet.Create(self); with adoquery do begin cachesize:= 500; //LoadFromFile('C:\1.xml'); // SaveToFile('C:\1.xml'); //commandtext:= 'select count(*)' //DSN=mx3base //commandtext:= 'INSERT INTO Table1 (FirstName, LastName, Phone)'+ //'VALUES (''Max77'', ''Box545'', ''031-333 77 88'')'; commandText:= 'SELECT * FROM Table1'; //SQL.add //connectionString:= 'Provider=MSDASQL;DSN=mxdbdemos;Uid=sa;Pwd=admin'; connectionString:= 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=mx3base'; Open; //recordset.save as XML //writeln(RecordsetToXML2( Recordset)); Recordset20(recordset).save(exepath+'recordset7.xml',adPersistXML) // SaveToFile(exepath+'recordsetdirect.txt',1); //Recordset15(recordset).moved(exepath+'recordset2.xml',adPersistXML) for i:= 0 to Recordcount - 1 do begin for z:= 0 to Fieldcount - 1 do Write((Fields[z].asString)+' '); Writeln(#13#10) Next; end; Close; Free; end; end; var sysnumber: THandle; BEGIN //@Main // sysnumber:= myMutex(Nil, true, MUTEX) if sysnumber <> 0 then writeln(itoa(sysnumber)+' success') else writeln('mutex error'); // writeln(getworld) //IsValidJSName TestWithXMLEasy XSLProcessortransform; Createform3; TForm1ParseXMLToMemo; //CreateCDSfromXML(self) // CreateEmptyXMLDocument(exepath).savetofile(exepath+'xmlfile.xml') CreateEmptyXMLDocument(exepath) //if IsInternet then //writeln(GetGeoWeatherAL('bern',TSPEAKFEED,'332820', APIKEY3, 12)); SetXMLtoMemo(self) End. ref:https://searchcode.com/codesearch/view/62390556/ doc: Description TALXmlDocument is exactly like Delphi TXmlDocument (Same functions and procedures) but 10 to 100 times more fastly (see demo) and can work in sax mode . Use TAlXMLDocument to represent an XML document. TAlXMLDocument can read an existing XML document from a file, it can be associated with an in-memory string that is the contents of an XML document, or it can create a new, empty XML document. You can use TALXMLDocument directly to load an XML document, read and edit it, and save any changes. TALXMLDocument uses an internal parser to analyze the XML document. When you set the Active property to true, TALXMLDocument parse the XML document so that you can examine or modify it. In particular, the DocumentElement property provides an interface to the root node of the document. You can use that interface to access its child nodes and to add or delete child nodes. Informations Status: Fully functional Source: Included Exe demo: included Size: 51 703kB Delphi 2007 (and newer) supports enabling DEP and ASLR via any of these three techniques: add the command-line switch –dynamicbase when compiling with dcc32 add the preprocessor command //{$DYNAMICBASE ON} to the source code manually OR in the bit in the header, with //{$SETPEOPTFLAGS $40} in the source code I'd like to be able to do the same thing with Delphi 2006 and C++ Builder 2006 (aka BDS 2006). Does anyone know how to do this? https://msdn.microsoft.com/en-us/library/windows/desktop/ms684315(v=vs.85).aspx static void Main(string[] args) { Mutex _mut = null; try { _mut = Mutex.OpenExisting(AppDomain.CurrentDomain.FriendlyName); } catch { //handler to be written } if (_mut == null) { _mut = new Mutex(false, AppDomain.CurrentDomain.FriendlyName); } else { _mut.Close(); MessageBox.Show("Instance already running"); } } function TransformXML(const SourceXml: string; const ATransformationFile: string = ''): string; property Data: string read GetData ; property SourceXmlDocument: IDOMDocument read FSourceXmlDocument write FSourceXmlDocument; property SourceXmlFile: string read FSourceXmlFile write FSourceXmlFile; property SourceXml: string read FSourceXml write FSourceXml; property TransformationDocument: IDOMDocument read FTransformationDocument write FTransformationDocument; property EmptyDestinationDocument: IDOMDocument read FEmptyDestinationDocument write FEmptyDestinationDocument; property ResultDocument: IDOMDocument read FResultDocument; property ResultString: string read GetResultString; published property TransformationFile: string read FTransformationFile write FTransformationFile; property OnTranslate: TTranslateEvent read FOnTranslate write FOnTranslate; property BeforeEachRow: TRowEvent read FBeforeEachRow write FBeforeEachRow; property AfterEachRow: TRowEvent read FAfterEachRow write FAfterEachRow; property BeforeEachRowSet: TRowEvent read FBeforeEachRowSet write FBeforeEachRowSet; property AfterEachRowSet: TRowEvent read FAfterEachRowSet write FAfterEachRowSet; procedure SIRegister_TXmlVerySimple(CL: TPSPascalCompiler); begin //with RegClassS(CL,'TObject', 'TXmlVerySimple') do with CL.AddClassN(CL.FindClass('TObject'),'TXmlVerySimple') do begin Root', 'TXmlNodeSimple', iptrw); Header', 'TXmlNodeSimple', iptrw); RegisterProperty('Ident', 'String', iptrw); RegisterMethod('Constructor Create'); RegisterMethod('Procedure Free'); RegisterMethod('Procedure Clear'); RegisterMethod('Procedure LoadFromFile( const FileName : String)'); RegisterMethod('Procedure LoadFromStream( const Stream : TStream)'); RegisterMethod('Procedure SaveToStream( const Stream : TStream)'); Procedure SaveToFile( const FileName : String)'); Procedure DefaultOnNodeSetText(Sender: TObject; Node: TXmlNodeSimple; Text : String)'); Procedure DefaultOnNodeSetName(Sender: TObject; Node: TXmlNodeSimple; Name : String)'); RegisterProperty('Text', 'String', iptrw); RegisterProperty('OnNodeSetText', 'TXmlOnNodeSetText', iptrw); RegisterProperty('OnNodeSetName', 'TXmlOnNodeSetText', iptrw); end; end; procedure SIRegister_TXMLDocument(CL: TPSPascalCompiler); begin //with RegClassS(CL,'TComponent', 'TXMLDocument') do with CL.AddClassN(CL.FindClass('TComponent'),'TXMLDocument') do begin Constructor Create2( AOwner : TComponent);'); Constructor Create( const AFileName : DOMString)'); RegisterMethod('Procedure Free;'); Procedure AfterConstruction'); Function AddChild( const TagName : DOMString) : IXMLNode;'); Function AddChild2( const TagName, NamespaceURI : DOMString) : IXMLNode;'); Function CreateElement(const TagOrData, NamespaceURI : DOMString): IXMLNode'); Function CreateNode( const NameOrData : DOMString; NodeType : TNodeType; const AddlData : DOMString) : IXMLNode'); Function GetDocBinding( const TagName : DOMString; DocNodeClass : TClass; NamespaceURI : DOMString) : IXMLNode'); Function IsEmptyDoc : Boolean'); Procedure LoadFromFile( const AFileName : DOMString)'); Procedure LoadFromStream( const Stream : TStream; EncodingType : TXMLEncodingType)'); Procedure LoadFromXML( const XML : string);'); Procedure LoadFromXML2( const XML : DOMString);'); Procedure Refresh'); Procedure RegisterDocBinding( const TagName : DOMString; DocNodeClass : TClass; NamespaceURI : DOMString)'); Procedure Resync'); Procedure SaveToFile( const AFileName : DOMString)'); Procedure SaveToStream( const Stream : TStream)'); Procedure SaveToXML( var XML : DOMString);'); Procedure SaveToXML2( var XML : string);'); RegisterProperty('AsyncLoadState', 'Integer', iptr); RegisterProperty('ChildNodes', 'IXMLNodeList', iptr); RegisterProperty('DOMDocument', 'IDOMDocument', iptrw); RegisterProperty('DOMImplementation', 'IDOMImplementation', iptrw); RegisterProperty('DocumentElement', 'IXMLNode', iptrw); RegisterProperty('Encoding', 'DOMString', iptrw); Function GeneratePrefix( const Node : IXMLNode) : DOMString'); RegisterProperty('Modified', 'Boolean', iptr); RegisterProperty('Node', 'IXMLNode', iptr); RegisterProperty('NSPrefixBase', 'DOMString', iptrw); RegisterProperty('SchemaRef', 'DOMString', iptr); RegisterProperty('StandAlone', 'DOMString', iptrw); RegisterProperty('Version', 'DOMString', iptrw); RegisterProperty('Active', 'Boolean', iptrw); RegisterProperty('FileName', 'DOMString', iptrw); RegisterProperty('DOMVendor', 'TDOMVendor', iptrw); RegisterProperty('NodeIndentStr', 'DOMString', iptrw); RegisterProperty('Options', 'TXMLDocOptions', iptrw); RegisterProperty('ParseOptions', 'TParseOptions', iptrw); RegisterProperty('XML', 'TStrings', iptrw); RegisterProperty('BeforeOpen', 'TNotifyEvent', iptrw); RegisterProperty('AfterOpen', 'TNotifyEvent', iptrw); RegisterProperty('BeforeClose', 'TNotifyEvent', iptrw); RegisterProperty('AfterClose', 'TNotifyEvent', iptrw); RegisterProperty('BeforeNodeChange', 'TNodeChangeEvent', iptrw); RegisterProperty('AfterNodeChange', 'TNodeChangeEvent', iptrw); RegisterProperty('OnAsyncLoad', 'TAsyncEventHandler', iptrw); end; end; ----app_template_loaded_code---- ----File newtemplate.txt not exists - now saved!---- hEHUODVW HWH (QWZLFNOHU JHQHUYWH $QZHQGHU EHUIUDFKWHWH HOHNWURQLVFKH 1HW]H 9LUHQJHIDKU XQG YHUQDFKOlVVL JWHV 6 R]LDOQHW] ± VRQVW QRFK ZDV"  6RIWZDUH ZLUG O DQJVDP ]XP 4XHOO DOOHQ PRGHUQHQ hEHOV DOV YHUQHW]WHV 5HLFK GHV %|VHQ ,VW GHU &RGH GHV 7HXIHOV" 1HLQ&RGHLVWYHUWHXIHOWJXW