Сравнивать деревья DOM))) при изменении структуры дерева - шаманить.
Реализация - через Xpath
Как хранить - имхо в реалиях зенки просто идти от верхнего уровня body и присваивать элементам порядковые номера сверху вниз и слева направо. Должно было бы получиться что то вроде словаря словарей, но поскольку такой конструкции нет, то просто писать в текстовый файл
первая строчка
Элемент 1: {Дочерний элемент 25, дочерний элемнет 26}
Элемент 26: {Дочерний элемент 48}
Ну и по сути как только количество дочерних элементов у какого либо из родителей изменится - значит поменялась и структура сайта.
FAQ
Хитропопая реклама - Можно в шаблоне игнорировать некоторые классы
А вдруг они изменят верстку? - Имхо то самое ожидаемое изменение
А не лучше ли хранить Теги, а не абстрактные номера? - Лучше конечно, но это надо больше шаманить, и я не уверен что это даст большую управляемость при сравнении, а вот наломать дров больше где получится
А вдруг у меня элементы разметятся по другому, и дерево будет то же самое, но с разными номерами? - Именно поэтому для разметки нужно следовать единому правилу. Я предложил слева-направо и сверху вниз, а там можете использовать любое, какое захочется
Достаточно ли проверять дочерние элементы? - ДО! Ибо все начинается с одного тега body у которого есть какое то количество дочерних элементов. В общем сопоставление по айдишнику и количеству дочерних элементов точно взлетит и изменение не пройдет незамеченным.
Я не знаю C#/Xpath -
http://zennolab.com/discussion/search/1829890/?q=XPATH&o=date&c[node]=134