First I want to thank everyone who tried to help.
Initially I had no return due to the fact that the HTML came with only the content inside the <body>...</body> and not the entire HTML.
My main problem was extracting text with line breaks <br/> that where suppressed and with special characters on some sites.
derek.john.evans, I liked the tree idea for exploring the content of an HTML.
PascalDragon, your request for an HTML example made me realize that in another part of the application I was clipping part of the HTML content and was only parsing the content inside the <body>. For this reason I always got null returns.
Below is the code: It might be useful for someone.
function ExtractHTMLXPath(sHTML, sXPath: String): String;
var vlDoc: THTMLDocument;
vlXPathResult: TXPathVariable;
vlStream: TStringStream;
begin
Result := '';
try
sHTML := StringReplace(sHTML, '<br/>', '<br/>'+LineEnding, [rfReplaceAll]);
vlStream := TStringStream.Create(sHTML);
ReadHTMLFile(vlDoc, vlStream);
vlXPathResult := EvaluateXPathExpression(UTF8ToUTF16(sXPath), vlDoc.DocumentElement);
Result := UTF16ToUTF8(vlXPathResult.AsText);
finally
vlXPathResult.Free;
vlDoc.Free;
vlStream.Free;
end;
end;