Несколько парсеров
Если у вас есть X-версии схемы, вам потребуется X-кодовые пути для их обработки.
Чтобы выбрать вашу реализацию, вам понадобится где-то оператор switch. Этот переключатель может просто вызывать методы, или это может быть метод фабрики, который возвращает правильный анализатор (класс или делегат).
Это не мешает вам делиться частями вашего кода между версиями, и это хорошая идея разбить ваш синтаксический анализ на его составные части, чтобы поддержать это. Вы можете разбить их на классы или методы.
У вас может быть общий базовый интерфейс для запуска любой версии и возврата графа объектов, который представляет XML. Получающаяся в результате объектная модель в идеале должна быть максимально независимой от версии, чтобы вы могли совместно использовать общие функциональные возможности.
Обновление данных
В качестве альтернативы вы можете использовать XSLT для обновления данных и использовать только один анализатор.
Вы можете либо реализовать это один раз для каждой версии и объединить все преобразования в цепочку, либо вы можете преобразовать напрямую в последнюю версию и изменять преобразования предыдущей версии с каждым выпуском.
Цепные преобразования имеют лучшую стоимость обслуживания. Прямое преобразование имеет лучшую производительность.
Для этого вам все еще понадобится переключатель:)