Можно ли это сделать?
Нет, не так, как вы себе это представляете.
XPath - это язык выбора . Он может только выбрать, что там. Например, этот
//node[following-sibling::*[contains(.//deepnode, 'ipsum')]]
выберет два соответствующих <node>
элемента:
<node key="some value"></node>
<node key="some value"></node>
И этот
//deepnode[contains(., 'ipsum')]
выберет два соответствующих <deepnode>
элемента
<deepnode key="some value">lorem ipsum dolor</deepnode>
<deepnode key="some value">lorem ipsum dolor</deepnode>
Вы даже можете объединить эти два выражения с оператором объединения (expr1|expr2)
, который будет возвращать четыре узла:
<node key="some value"></node>
<deepnode key="some value">lorem ipsum dolor</deepnode>
<node key="some value"></node>
<deepnode key="some value">lorem ipsum dolor</deepnode>
Но это все равно не похоже на вывод документ, который вы предлагаете. XPath не может создавать документы. Он может предоставить вам списки узлов, которые соответствуют определенным критериям.
То, что вы хотите - это преобразовать входные данные XML во что-то еще. Это можно сделать, например, с помощью XSLT или XQuery, или с помощью ручной сборки DOM на любом языке программирования хоста, который поддерживает XML.