Thema: Delphi XML-Knoten löschen!

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: XML-Knoten löschen!

  Alt 3. Nov 2005, 10:22
Hi salem01.

Ich habe deinen Code ein wenig umgeschrieben - erkennst du ihn wieder?

Delphi-Quellcode:
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;
Universell einsetzbar ist der Code aber nicht. Besser wäre der folgende Code, aber dann müsstest du die Aufrufe anpassen:

Delphi-Quellcode:
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;
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.

Grüße vom marabu
  Mit Zitat antworten Zitat