Как часть базового класса для некоторого обширного модульного тестирования, я пишу вспомогательную функцию, которая рекурсивно сравнивает узлы одного объекта XmlDocument с другим в С# (.NET). Некоторые требования:
- Первый документ - это источник, например. что я хочу, чтобы XML-документ выглядел. Таким образом, второй - это тот, который я хочу найти, и он не должен содержать дополнительные узлы не в первом документе.
- Должно возникнуть исключение, когда обнаружено слишком много существенных различий, и это должно быть легко понято человеком, который смотрит на описание.
- Порядок дочерних элементов важен, атрибуты могут быть в любом порядке.
- Некоторые атрибуты игнорируются; в частности
xsi:schemaLocation
иxmlns:xsi
, хотя я хотел бы иметь возможность передать, в каких из них. - Префиксы для пространств имен должны соответствовать как атрибутам, так и элементам.
- Пробел между элементами не имеет значения.
- Элементы будут либо иметь дочерние элементы, либо
InnerText
, но не оба.
Пока я разбираю что-то вместе: кто-нибудь написал такой код, и можно ли его разделить здесь?
В стороне, что бы вы назвали первым и вторым документами? Я упоминал их как "источник" и "цель", но он чувствует себя не так, поскольку источник - это то, что я хочу, чтобы target выглядел, иначе я бросаю исключение.