iSelectEnd := Buffer.Find(sSearchString := '>' , udiStartPos := iSelectStart);
iSelectTagClose := Buffer.Find( sSearchString := '/' , udiStartPos := iSelectStart);
(* Check wether range is valid *)
sTag := Buffer.Copy( udiStart:= iSelectStart + 1, udiEnd:= iSelectEnd );
(* check wether a Parameter is within the range *)
IF iSelectEnd < iSelectStartPara THEN
NextTag := Buffer.Copy(udiStart:= iSelectStart + 1, udiEnd:= iSelectStartPara );
END_IF;
// create path
; // skip when it is a prolog, or when it is comment or CDATA
ELSIF iSelectTagClose = iSelectStart + 1 THEN
(* End Tag *)
(* Extinguish last Tag *)
iSelect := TagListSeek.FindBack(sSearchString := '/' );
TagListSeek.CutOff(udistartpos := iSelect);
ELSIF iSelectTagClose = iSelectEnd - 1 THEN
(* Tag with end Tag *)
(* save interleaving *)
TagListSeek.Append := '/' ;
TagListSeek.Append := NextTag ;
iSelect := TagListSeek.FindBack ( sSearchString := '/' );
TagListSeek.CutOff ( udistartpos:= iSelect );
(* save interleaving *)
ELSE
(* no tag found *)
iSearchPos := Buffer.Length ;
NextTag := '' ;
END_IF;