Результатом любого выражения XPath будет либо отдельный узел, либо список узлов; вы не сможете получить древовидную структуру, используя только XPath.
Однако вы можете выбрать запрошенные узлы: вы получите список их вместо иерархии.
Вот простой XPath, который выполнит это:
//DDD[@id = '1'] | //DDD[@id = '1']/.. | //DDD[@id = '1']/../..
Обратите внимание, что использование пути //
может повлиять на производительность. Вы можете расширить //
до /AAA/BBB/CCC/
Если вы хотите поэкспериментировать с этим, вы можете запустить выражения XPath для произвольного XML с помощью моего онлайн-инструмента, здесь .
Удачи!