Hmm,
also ich würde den ganzen String durchgehen, und alle auftauchenden, öffnenden Tags an ein Array anhängen. Bei einem schließenden tag wird dann geprüft, ob der Typ mit dem letzten Element im Array übereinstimmt, wenn nein, ist es nicht
XML-konform. Dann wird das Tag wieder vom Stapel entfernt. Am Ende prüfst du dann noch, ob das Array leer ist, also alle Tags geschlossen wurden.
Tags wie <... /> kannst du ja einfach überspringen.