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
Другие вопросы по тегам