Einzelnen Beitrag anzeigen

matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: XML fehlende Nodes automatisiert erstellen

  Alt 29. Sep 2016, 13:19
... und genau da häng ich grad mit meinem Gehirn fest.

Ich frag ja jetzt den vorhandenen Paramter mittels XPath ab,

das heist ich bekomm nil wenn der Knoten nicht existiert

dann möcht ich den erstellen, aber eben mit dem übergebenen String des XPath

Im prinzip sollte dann die Funktion so arbeiten


Function CreateNodepath(rootnode:IXMLNOde; nodepath:String):IXMLNode;
begin;
letzten Node extrahieren
dann mittels XPath prüfen ob parentNode existiert
wenn ja dann addchild(letzter Node)
wenn nein dann Createnodepath rekursiv aufrufen
neuen Node zurück geben
end;


so in etwa, aber wie ich das dann in Code Umsetze bekomm ich die Gehirnwindung nicht ganz zusammen. Vor allem wie zerlege ich den String des XPath um die Nodes dann zu erstellen. Gibts da passende Stringfunktionen die vom StringEnde bis gewähltes Zeichen einen String wegschneiden können?? Denn ich denke so in der art brauch ich was


hab jetzt mal versucht was zu schreiben, noch ungetestet ich wollte zuerst noch euch drüber gucken lassen

Delphi-Quellcode:
   class function TXPathhelper.CreateNode(xnRoot: IXMLNode; const nodepath: WideString):IXmlNode;
      var a,newpath,newchild:String;
          i:Integer;
          wantednode:IXMLNode;
    begin
       a:=nodepath;
       i:=length(a);
       while (a[i]<>'/') or (i>0) do dec(i);
       if i>0 then begin; //was gefunden dann extrahieren und XPath anwenden
        newpath:=copy(nodepath,1,i-1);
        newchild:=copy(nodepath,i+1,length(nodepath)-i);
        wantednode:=TXPathhelper.SelectNode(xnroot,newpath);
        if wantednode<>nil then begin;
                                xnroot.AddChild(newchild);
                                result:=TXPathhelper.SelectNode(xnroot,nodepath);
                            end
                           else result:=TXPathhelper.CreateNode(xnroot,newpath);

       end;
    end;
Matthias
Das Leben ist eines der härtesten.

Geändert von matashen (29. Sep 2016 um 13:44 Uhr)
  Mit Zitat antworten Zitat