Ungefähr so wird es auch gemacht. Du kannst dir eine "professionelle" Lösung dafür im .NET-Framework anschauen, genauso wird es nämlich bei der WebRequest-Klasse gemacht. Diese hat eine statische Methode Create (kein Konstruktor), die als Parameter die zu öffnende
URI übernimmt und dann die entsprechende Ableitung instanziiert, also z.B. HttpWebRequest oder FtpWebRequest. Ist zwar, wie ich finde, nicht die allersauberste Lösung (weil die Basisklasse über ihre Ableitungen Bescheid wissen muss), aber es ist recht praktisch.
In deinem Fall ist es ja vermutlich so, dass deine Klasse den
XML-Code so oder so runterladen muss, das kann die Basisklasse ja schon machen, und dann anhand der ersten Zeilen, also DTD, Schema oder Root-Element, wie auch immer, ermitteln kann, an welchen Parser das ganze übergeben werden muss.