У меня есть XML, который состоит из узлов-контейнеров, содержащих различные дочерние узлы, включая другие узлы-контейнеры. Пример XML будет выглядеть как ...
<CONTAINER>
<SEARCHFOR />
<ITEM/>
<ITEM/>
<ITEM/>
<ITEM/>
<ITEM/>
<CONTAINER>
<SEARCHFOR />
<ITEM/>
<ITEM/>
<CONTAINER>
<SEARCHFOR />
<ITEM id="1" />
<ITEM/>
<ITEM/>
<CONTAINER>
<ITEM id="2" />
</CONTAINER>
</CONTAINER>
</CONTAINER>
</CONTAINER>
Я бы хотел найти узел SEARCHFOR, ближайший (по объему) к ПУНКТУ, имеющий id = 2. Узел SEARCHFOR может быть предшествующим узлом ITEM или дочерним узлом предка CONTAINER. У меня есть выражение XPath, которое может найти все узлы SEARCHFOR, находящиеся в области видимости, которые соответствуют критериям, но я не могу заставить его вернуть только один ближайший элемент.
//ITEM[@id="2"]/ancestor::CONTAINER/SEARCHFOR
Я тестирую в Sketchpath и буду реализовывать это в Delphi, используя анализатор XML, который может обрабатывать XPath 2.0, так что синтаксис также приемлем. Я могу сделать это в коде, получив свои результаты и используя Delphi, чтобы получить тот, который представляет интерес, но, если это вообще возможно, мне действительно нужно, чтобы это было сделано в самом XPath для моей реализации. Любая помощь приветствуется.
Спасибо,
Michael