XSLT/Xpath, о нумерации

Статус
Закрыто для дальнейших ответов.

антиКИЛЛЕР

Well-Known Member
Регистрация
28.07.2011
Сообщения
92
Здравствуйте.
Помогите пожалуйста разобраться и дайте указание, в сторону чего курить маны, т.к. уже целый день сижу и никак не могу сделать элементарную, казалось бы, вещь.
Итак задача:
Есть исходный XML (он значительно больше, но я немного сократил, сути это не меняет):
Код:
<list>
  <section>
    <elem id="el-0001"/>
    <elem id="el-0002"/>
    <link id="ln-0001"/>
  </section>
  <section>
    <elem id="el-0003"/>
    <link id="ln-0002"/>
    <elem id="el-0004"/>
  </section>
  <linkGroup>
    <link id="ln-0001">
      <elem id="el-0005"/>
      <elem id="el-0006"/>
    </link>
    <link id="ln-0002">
      <elem id="el-0007"/>
      <elem id="el-0008"/>
      <elem id="el-0009"/>
    </link>
  </linkGroup>
</list>
Задача состоит в добавлении порядкового номера элементу elem, но идущего не в том порядке, в котором они расположены в исходном документе, а в порядке с учётом располагающихся в элементе linkGroup/link.

Немного сумбурно выразился, но вот что в итоге должно получится:
Код:
<list>
  <section>
    <elem pos="1" id="el-0001"/>
    <elem pos="2" id="el-0002"/>
    <link id="ln-0001"/> /* тут обращаемся в linkGroup/link по id="ln-0001" и нумеруем распологающиеся там elem, затем уже обратно */
  </section>
  <section>
    <elem pos="5" id="el-0003"/> /* тут продолжаем нумерацию, после номера в link id="ln-0001" */
    <link id="ln-0002"/> /* тут опять нумеруем элементы сначала в linkGroup/link id="ln-0002", а затем продолжаем здесь нумеровать */
    <elem pos="9" id="el-0004"/>
  </section>
  <linkGroup>
    <link id="ln-0001">
      <elem pos="3" id="el-0005"/>
      <elem pos="4" id="el-0006"/>
    </link>
    <link id="ln-0002">
      <elem pos="6" id="el-0007"/>
      <elem pos="7" id="el-0008"/>
      <elem pos="8" id="el-0009"/>
    </link>
  </linkGroup>
</list>
Я только начинающий xstl-верстальщик и уже всю голову сломал, как именно xslt-стили записать.
Буду очень рад, если кто подскажет методику или лучше фрагмет шаблона, выполняющего данную операцию.

Большое спасибо за помощь)
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Здравствуйте.
Помогите пожалуйста разобраться и дайте указание, в сторону чего курить маны, т.к. уже целый день сижу и никак не могу сделать элементарную, казалось бы, вещь.
Итак задача:
Есть исходный XML (он значительно больше, но я немного сократил, сути это не меняет):
Код:
<list>
  <section>
    <elem id="el-0001"/>
    <elem id="el-0002"/>
    <link id="ln-0001"/>
  </section>
  <section>
    <elem id="el-0003"/>
    <link id="ln-0002"/>
    <elem id="el-0004"/>
  </section>
  <linkGroup>
    <link id="ln-0001">
      <elem id="el-0005"/>
      <elem id="el-0006"/>
    </link>
    <link id="ln-0002">
      <elem id="el-0007"/>
      <elem id="el-0008"/>
      <elem id="el-0009"/>
    </link>
  </linkGroup>
</list>
Задача состоит в добавлении порядкового номера элементу elem, но идущего не в том порядке, в котором они расположены в исходном документе, а в порядке с учётом располагающихся в элементе linkGroup/link.

Немного сумбурно выразился, но вот что в итоге должно получится:
Код:
<list>
  <section>
    <elem pos="1" id="el-0001"/>
    <elem pos="2" id="el-0002"/>
    <link id="ln-0001"/> /* тут обращаемся в linkGroup/link по id="ln-0001" и нумеруем распологающиеся там elem, затем уже обратно */
  </section>
  <section>
    <elem pos="5" id="el-0003"/> /* тут продолжаем нумерацию, после номера в link id="ln-0001" */
    <link id="ln-0002"/> /* тут опять нумеруем элементы сначала в linkGroup/link id="ln-0002", а затем продолжаем здесь нумеровать */
    <elem pos="9" id="el-0004"/>
  </section>
  <linkGroup>
    <link id="ln-0001">
      <elem pos="3" id="el-0005"/>
      <elem pos="4" id="el-0006"/>
    </link>
    <link id="ln-0002">
      <elem pos="6" id="el-0007"/>
      <elem pos="7" id="el-0008"/>
      <elem pos="8" id="el-0009"/>
    </link>
  </linkGroup>
</list>
Я только начинающий xstl-верстальщик и уже всю голову сломал, как именно xslt-стили записать.
Буду очень рад, если кто подскажет методику или лучше фрагмет шаблона, выполняющего данную операцию.

Большое спасибо за помощь)
http://zvon.org/comp/r/tut-XSLT_1.html для выкуривания, в каком-то из уроков точно есть похожее
 

антиКИЛЛЕР

Well-Known Member
Регистрация
28.07.2011
Сообщения
92
[member='Medwoodu'], спасибо за ссылку. решить заджачу у меня, к сожалению, так и не получилось, но по ссылке действительно много очень хороших примеров и решений.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418

антиКИЛЛЕР

Well-Known Member
Регистрация
28.07.2011
Сообщения
92
http://www.codenet.ru/webmast/xml/xslt/4_2.php
Это не совсем то. В приведённой вами ссылке - обычная сортировка. А мне же элементы не нужно перемещать и сортировать вовсе, нужно оставть исходный XML документ, но в элементы elem добавить порядковые номера, не совпадающие с порядком в котором элементы встречаются.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
http://www.codenet.ru/webmast/xml/xslt/4_2.php
Это не совсем то. В приведённой вами ссылке - обычная сортировка. А мне же элементы не нужно перемещать и сортировать вовсе, нужно оставть исходный XML документ, но в элементы elem добавить порядковые номера, не совпадающие с порядком в котором элементы встречаются.
т.е. номера у вас в атрибутах? тогда оттуда вытаскиваете их, преобразуете и подставляете, если я все правильно понял.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ