2016-02-23 6 views
0

Я следующую структуру XML:XSL: уровни Count между текущим узлом и другим конкретным узлом

<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», level = «multiple». Но если список вложен в течение 4-го или более раз, формат должен измениться на «1», level = «single».

Нужный выход для указанной выше структуры будет:

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, Jens

ответ

1

Если вы знаете, горячими, чтобы получить количество всех предков узла, а затем просто вычесть число предков someSubNodeInXmlFile и у вас есть число узлов между ними (плюс один).

R---o---o---X---o---o---o---o---o---N 
      3      9 
      \_______________________/ 
        9 - 3 - 1 = 5 
+0

Mpf, это так просто и просто идея ... Иногда вы не видите одно дерево в глубоком лесу ... (этот термин существует на английском языке? ^^). Большое спасибо, что помогло. – Jens

Смежные вопросы