Перейти к содержимому

Фотография
- - - - -

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


  • Вы не можете создать новую тему
  • Закрытая тема Тема закрыта
Сообщений в теме: 5

#1 антиКИЛЛЕР

антиКИЛЛЕР

    Частый гость

    Топикстартер
  • Участник
  • 44
    92 сообщ.

Отправлено 28 Июль 2011 в 19:18

Здравствуйте.
Помогите пожалуйста разобраться и дайте указание, в сторону чего курить маны, т.к. уже целый день сижу и никак не могу сделать элементарную, казалось бы, вещь.
Итак задача:
Есть исходный 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-стили записать.
Буду очень рад, если кто подскажет методику или лучше фрагмет шаблона, выполняющего данную операцию.

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

Спонсор

#2 Medwoodu

Medwoodu

    Злобный модер

  • суперМодератор
  • 357
    1 418 сообщ.

Отправлено 29 Июль 2011 в 09:50

Здравствуйте.
Помогите пожалуйста разобраться и дайте указание, в сторону чего курить маны, т.к. уже целый день сижу и никак не могу сделать элементарную, казалось бы, вещь.
Итак задача:
Есть исходный 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 для выкуривания, в каком-то из уроков точно есть похожее
  • 1

#3 антиКИЛЛЕР

антиКИЛЛЕР

    Частый гость

    Топикстартер
  • Участник
  • 44
    92 сообщ.

Отправлено 30 Июль 2011 в 01:26

Medwoodu, спасибо за ссылку. решить заджачу у меня, к сожалению, так и не получилось, но по ссылке действительно много очень хороших примеров и решений.
  • 0

#4 Medwoodu

Medwoodu

    Злобный модер

  • суперМодератор
  • 357
    1 418 сообщ.

Отправлено 30 Июль 2011 в 16:54

Medwoodu, спасибо за ссылку. решить заджачу у меня, к сожалению, так и не получилось, но по ссылке действительно много очень хороших примеров и решений.

http://www.codenet.ru/webmast/xml/xslt/4_2.php
  • 0

#5 антиКИЛЛЕР

антиКИЛЛЕР

    Частый гость

    Топикстартер
  • Участник
  • 44
    92 сообщ.

Отправлено 30 Июль 2011 в 20:03

http://www.codenet.ru/webmast/xml/xslt/4_2.php

Это не совсем то. В приведённой вами ссылке - обычная сортировка. А мне же элементы не нужно перемещать и сортировать вовсе, нужно оставть исходный XML документ, но в элементы elem добавить порядковые номера, не совпадающие с порядком в котором элементы встречаются.
  • 0

#6 Medwoodu

Medwoodu

    Злобный модер

  • суперМодератор
  • 357
    1 418 сообщ.

Отправлено 31 Июль 2011 в 10:02


http://www.codenet.r...ml/xslt/4_2.php

Это не совсем то. В приведённой вами ссылке - обычная сортировка. А мне же элементы не нужно перемещать и сортировать вовсе, нужно оставть исходный XML документ, но в элементы elem добавить порядковые номера, не совпадающие с порядком в котором элементы встречаются.

т.е. номера у вас в атрибутах? тогда оттуда вытаскиваете их, преобразуете и подставляете, если я все правильно понял.
  • 0



Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение
Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей