Ich hab sowas Ähnliches mit OmniXML und XPath gelöst. Um z.B. aus einer *.groupproj-Datei zu lesen:
Delphi-Quellcode:
function GroupProj_ReadProjects(const AGroupProjName: string; ADProjNames: TStrings): Boolean;
var
Doc: IXMLDocument;
Root: IXMLElement;
CallTargetNode, ProjectNode: IXMLNode;
Targets: string;
begin
Doc := CreateXMLDoc;
Doc.PreserveWhiteSpace := False;
if not Doc.Load(AGroupProjName) then
Exit(False);
Root := Doc.DocumentElement;
if (Root = nil) or (Root.TagName <> 'Project') then
Exit(False);
CallTargetNode := Root.SelectSingleNode('Target[@Name=''Build'']/CallTarget');
Targets := CallTargetNode.Attributes.GetNamedItem('Targets').Text;
// usw. ...
end;