Есть несколько абзацев с одинаковым идентификатором? Конечно, нет ...
Как правило, это плохая практика (поскольку предупреждения существуют по определенной причине), но вы можете подавить предупреждения, используя @, хотя я не уверен на 100%, что он работает с вызовами функций из такого класса, дайте мне знать, если это делает!
$caption = "blah blah<p id ='test'>Test message</p>";
$doc = new DOMDocument();
@$doc->loadHTMLFile($caption);
$xmessage = @$doc->getElementById('test');