У меня есть 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, наиболее близкие по объему к узлам ITEM.Смотрите мой другой вопрос, что я имею в виду здесь.
Найти ближайшего предка / родного брата, который соответствует критериям
Мне нужно сначала найти интересующие узлы ITEM, а затем перейти оттам для узлов поиска.Другими словами, // SEARCHFOR как мое выражение недостаточно.У меня есть выражение, которое находит узел SEARCHFOR, ближайший по объему к каждому узлу ITEM.Это хорошо работает и выглядит как ...
for $v in
//ITEM
return
($v/(ancestor::CONTAINER/SEARCHFOR|preceding-sibling::SEARCHFOR))[last()]
Однако список результатов не уникален.Я получаю 11 результатов, по одному для каждого узла ITEM, как и ожидалось.Мне нужен уникальный набор результатов, содержащий только 3 элемента.Я видел предложения по использованию группировки в XSL, но я не могу сделать это с помощью инструментов, которые я использую, но я могу использовать синтаксис XPath 2.0.Я также видел использование normalize-space () для получения уникальных результатов, но у меня нет текста с моим XML.Моя уникальность должна определяться абсолютным путем каждого узла.
Спасибо за любую помощь, Майкл