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