![]() |
XML-Knoten löschen!
Hi zusammen,
ich habe ein Problem mit dem Löschen eines XML-Tag mit seinen unter Tags!. Hier ist mal der Quellcode:-
Delphi-Quellcode:
diese Funktion wird wie folgend in einer andere Unit aufgerufen:function ProbandLoeschen(const probandenXML, probandID : string) : string; var XMLDOMProbanden : IXMLDOMDocument; XMLDOMProbandNode : IXMLDOMNode; begin XMLDOMProbanden := CoDOMDocument40.Create; XMLDOMProbanden.async := false; XMLDOMProbanden.loadXML(probandenXML); //bestimmer der ID des jeweiligen probanden XMLDOMProbandNode := XMLDOMProbanden.selectSingleNode ('//proband[name="'+ probandID +'"]'); if(NOT(XMLDOMProbandNode = NIL)) then begin //löschen des probanden anhand seiner ermittelten ID XMLDOMProbanden.selectSingleNode('/probanden').removeChild(XMLDOMProbandNode); end; result := XMLDOMProbanden.xml; end;
Delphi-Quellcode:
Die XML-datei der Probanden sieht folgendermassen aus:
//Proband löschen (Button von der XSL-Datei)
if(funktion = 'probandloeschen') then begin CreateFileIfNotExist(getDataPath('xml\probanden.xml'), xorKey); xmlString:= checkedFileToString(getDataPath('xml\probanden.xml'), xorKey); if xmlString = '' then begin result:= fileToString(getDataPath('error\manipulated.html')); exit; end; with RequestInfo.Params do xmlString:= ProbandLoeschen(xmlString, RequestInfo.Params.Values['probandID']); checkedStringToFile(xmlString, getDataPath('xml\probanden.xml'), xorKey); result:= CreateHTMLProbandenverwaltung(xmlString, xslString); exit; end;
Delphi-Quellcode:
ich kann diesen probanden-knoten aber irgendwie nicht löschen!!.
<probanden>
<proband> <id>1</id> <name>Mustermann</name> <vorname>Alex</vorname> ....... <attribut typ="nc"> <beschreibung>Name</beschreibung> <def_wert>Mustermann</def_wert> </attribut> <attribut typ="nc"> <beschreibung>Vorname</beschreibung> <def_wert>Alex</def_wert> </attribut> ...... </proband> ........... </probanden> liegt es vielleicht an der Anzahl der unter-Tags?? denn ich habe eine Fuktion zum attribute löschen, die fast genauso aussieht, aber die geht!! :gruebel: :gruebel: . kann mir vielleicht jemand weiterhelfen?. LG. |
Re: XML-Knoten löschen!
Hi.
Dein XPATH Ausdruck ist nicht in Ordnung.
Delphi-Quellcode:
Ein Beispiel zum Löschen eines Knoten findest du hier:
var
xp: string; begin ... xp := Format('//proband[id="%s"]', [probandID]); XMLDOMProbandNode := XMLDOMProbanden.selectSingleNode (xp); ... end; ![]() Grüße vom marabu |
Re: XML-Knoten löschen!
danke, habe es ausprobiert und leider gleiche problem :cry: .
ich habe aber eine variable definiert, der den wert '1' zugewiesen und habe den eintrag in meiner liste mit der ID = 1 und es geht!. ich glaube er schafft es nicht die richtige ID zu ermitteln :( . könnte es vielleicht an den ermittelten daten vom server liegen, dass er die in einem anderen format übermittelt?!?! LG |
Re: XML-Knoten löschen!
Das musst du doch wissen, wenn du dir mal den XML-Code der Datei vom Server anzeigen lässt :stupid:
|
Re: XML-Knoten löschen!
das problem ich habe den code übernommen und möchte es erweitern, bin auch ziemlich neu in delphi bzw. XML :oops: .
|
Re: XML-Knoten löschen!
Hi salem01.
Ich habe deinen Code ein wenig umgeschrieben - erkennst du ihn wieder?
Delphi-Quellcode:
Universell einsetzbar ist der Code aber nicht. Besser wäre der folgende Code, aber dann müsstest du die Aufrufe anpassen:
function ProbandLoeschen(const markup, id: string) : string;
var n: IXMLDOMNode; begin with CoDOMDocument.Create do begin async := false; if loadXML(markup) then begin n := selectSingleNode(Format('//proband[id="%s"]', [id])); if Assigned(n) then n.parentNode.removeChild(n); Result := xml; end else Result := markup; end; end;
Delphi-Quellcode:
Du solltest deinen Code mal mit break points ausführen und dir die Inhalte der Variablen anschauen - vielleicht steht ja was anderes drin als du denkst.
function DropNodes(markup, xPath: string): string;
var nl: IXMLDOMNodeList; n: IXMLDOMNode; i: integer; begin with CoDomDocument.Create do begin async := false; if loadXML(markup) then begin nl := selectNodes(xPath); for i := Pred(nl.length) downto 0 do begin n := nl.item[i]; n.parentNode.removeChild(n); end; Result := xml; end else Result := markup; end; end; procedure TDemoForm.TestButtonClick(Sender: TObject); var xPath: string; begin xPath := Format('//proband[id="%s"]', [RequestInfo.Params.Values['probandID']]); xmlString:= DropNodes(xmlString, xPath); end; Grüße vom marabu |
Re: XML-Knoten löschen!
Danke marabu,
es funktioniert jetzt, lag nicht am delphi teil, sondern am java-script in der xsl-datei :roll: !. aber nochmal danke :thumb: LG. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz