Представим, что полученная страница валидная и мы записали ее в файл и т.к. само по себе содержимое уже имеет иерархию (html теги) то по какому алгоритму осуществлять поиск того или иного тега и все его содержимое?
Единственный верный ответ: если структура документа древовидная - значит нахождение нужного узла - это обход такого "дерева".
Далее - мы используем знания из документации W3C для понимания всевозможных вариантов открытия и закрытия тега - "узла". Это будут наши виртуальные "скобки".
Проверяем валидность и что нет пересечений: внутренние теги узла всегда закрываются внутри этого узла и на том же уровне, на каком они были открыты.
Затем, преобразуем раскрытие "скобок" к представлению через "обратную польскую запись" раскрытия скобок даст нам путь к нужному узлу.
В итоге, получаем аналог XPath.
Добавлю, что свойства тегов непосредственно к составлению "дерева" и его превращению в подобие XPath - никак не относятся.
Свойства тегов - участвуют только в выборке нужного узла в дальнейшем.
Они относятся только к выборке.