There isn't an existing one... Not that I know of.
You would need to fill the list yourself.
You might be able to retrieve the info from the HL. (I haven't checked the XML HL in a while, but it should follow the same implementation as the PasHL).
Maybe read the tutorial on the wiki, for writing a HL / not sure if needed or helpful.
Xml tags should be stored as folds (at least if folding is enabled).
Then there is a fold level.
You can get the foldlevel at the pos of the caret (more later). then search the lines for where that fold level opened (Line[x].MinFoldLevel).
You can get info for any pos in the line via
NodeList := fHighlighter.FoldNodeInfo[lLineIdx];
NodeList.ClearFilter; // only needed once, in case the line was already used
NodeList.AddReference;
NodeList.ActionFilter := [sfaFoldFold]; // not sure maybe just sfaFold or maybe sfaOpen or combintation
The incomplete node want be in there, but the one before should...
I haven't looked at this in a while.
Above is from syneditmarkupfoldcoloring.pas / But there are other bits of code working with it.
Maybe the syneditmarkupwordgroup.pp (doing word pairs based on their fold level) has a better example.
Its still a bit more than you need, because it can deal with tripple pairs...
Sorry this is all very vague.
I need to find a bit more time to go through the existing code, and remind myself.