function TSearchNode.FindNode(const aNodeName: DOMString;
aNodeContent: DOMString; const aNode: TDOMNode): TDOMNode;
var S: String; /// these two variables are for debugging only... so you can skip them
T: String;
function NodeFound(var Node: TDOMNode): boolean;
var vNode: TDOMNode;
bName: boolean;
begin
result := false;
if Node = nil then exit;
bName := Node.CompareName(aNodeName)=0;
if bName then begin
if UTF8CompareStr(Node.TextContent, aNodeContent)=0 then begin
result := true;
exit;
end;
end;
vNode := Node.FirstChild;
if assigned(vNode) then begin
S := vNode.NodeName;
T := vNode.TextContent;
end;
while assigned(vNode) and not result do begin
result := NodeFound(vNode);
S := vNode.NodeName;
T := vNode.TextContent;
if result then begin
Node := vNode; /// we must take the value out
break;
end;
vNode := vNode.NextSibling;
if assigned(vNode) then begin
S := vNode.NodeName;
T := vNode.TextContent;
end;
end;
end;
begin
if assigned(aNode) then begin
S := aNode.NodeName;
T := aNode.TextContent;
end;
if aNode = nil then
result := FFirstChild
else
if aNode.NextSibling = nil then
result := aNode.ParentNode.NextSibling
else
result := aNode.NextSibling;
while assigned(result) do begin
S := result.NodeName;
T := result.TextContent;
if NodeFound(result) then
break;
result := result.NextSibling;
if assigned(result) then begin
S := result.NodeName;
T := result.TextContent;
end;
end;
end;