XSL: количество уровней между текущим узлом и другим конкретным узлом
У меня есть следующая структура XML:
<someSubNodeInXmlFile text="mainListStart">
<a text="text1">
<b text="text2">
<a text="text3">
<c text=""text4/>
</a>
<a text="text5"/>
</b>
</a>
<a text="text6">
<c text="text7"/>
</a>
</someSubNodeInXmlFile>
Моя проблема связана с нумерацией. Приведенный выше XML можно рассматривать как вложенный список.
Формат нумерации по умолчанию - "1.1.1", уровень = "несколько". Но если список вложен в четвертый или более раз, формат должен измениться на "1", уровень = "одиночный".
Желаемый результат для вышеуказанной структуры будет:
1. mainListStart
1.1 text1
1.1.1 text2
1 text3
1 text4
2 text5
1.2 text6
1.2.1 text7
По моему мнению, например, если мой текущий узел является первым, мне нужно вычислить, сколько предков находится между моим текущим узлом и родителем. Если вычисленное число меньше 4, используйте "1.1.1" в качестве формата элемента списка, в противном случае используйте "1" в качестве формата.
Я попробовал несколько вещей сейчас, но ни одна из них не сработала. Я могу подсчитать, сколько в общем предков у меня для текущего узла, но это вычисление полного дерева предков, а не до определенного узла 'someSubNodeInXmlFile'.
Возможно ли это с помощью простого выражения xpath или я пытаюсь вычислить число с помощью рекурсивного шаблона, который начинается с current() и ищет каждого следующего предка, если он нужен, добавляя один к числу, если нет, и переходит к следующему предку?
Я могу представить, что последняя идея не очень эффективна (если она вообще работает). Но какое лучшее решение?
Заранее спасибо.
BRgrds, Йенс
1 ответ
Если вы знаете, как получить число всех предков узла, просто вычтите число предков someSubNodeInXmlFile
и у вас есть количество узлов между ними (плюс один).
R---o---o---X---o---o---o---o---o---N
3 9
\_______________________/
9 - 3 - 1 = 5