Возможно, вы захотите взглянуть на XPathGen https://github.com/amouat/XPathGen
Это создаст уникальный XPath в форме /node()[1]/node()[1]
для данного узла DOM. Однако есть некоторые проблемы с XPath, а именно не слитые текстовые узлы и узлы «пролога», которые нельзя однозначно идентифицировать чисто с XPath. Например, если у вас есть следующий документ в DOM:
<a>b</a>
И добавьте текстовый узел, чтобы он стал:
<a>bc</a>
XPath для узлов b и c будет одинаковым, но у вас все равно будут отдельные узлы DOM (если только вы не вызовете normalize в документе). Если вам нужно справиться с этой ситуацией, вам необходимо сохранить смещения и длины для текстовых узлов.