Звучит так, как будто проблема, которую вы пытаетесь решить, довольно интересна.
На первый взгляд, я бы предложил написать собственную реализацию потомка XPathNavigator
- есть только 20 с лишним методов для написания, и ни один из них не имеет особенно трудной подписи.
Наивная реализация, использующая не кэшированное отражение, будет медленной (ish), но будет работать как подтверждение концепции, и вы можете внести изменения, чтобы улучшить производительность, если / когда это станет проблемой.
Однако ...
... Я думаю, что вы можете столкнуться с некоторыми трудностями, связанными с вашим подходом, а не с какими-либо деталями реализации.
Файл XML (по своей природе) представляет собой простую иерархию элементов и атрибутов - в графе узлов нет циклов (или циклов).
Выражение XPath может включать в себя оператор "//
", что в широком смысле означает поиск на неограниченной глубине. (Точное определение см. В разделе 2.5 XPath 1.0 .)
Если вы применили такое выражение к графу объектов с перекрестными ссылками (он же циклы объектов), то вы рискуете, что оценщик XPath попадет в бесконечный цикл, поскольку он попытался рекурсивно перечислить эффективно бесконечный граф.
Вы можете обойти эту проблему, отслеживая родительские узлы в вашем XPathNavigator
и создавая исключение, если обнаружен цикл, но я не уверен, насколько это будет жизнеспособным.