xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Небольшой вопрос по XSL


Автор Сообщение
xbor1
Гость




[13583] Чт Фев 19, 2009 13:11
Небольшой вопрос по XSL
Подскажите плиз, как организовать такую вещь!

я имею например следущую структуру

Код:


<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 2 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 2 </tr>
<tr> 1 </tr>
<tr> 1 </tr>
<tr> 1 </tr>



задав

Код:


for-each select="//tr[contains(text(),'1')]"



я получу выдачу для всех TR, а мне надо органицовать блоками с первого tr2 до второго tr 2 все tr 1 и т.д.

Наглядно выглядит так, начать с первого TR 2 и делать до второго TR 2

Код:



for-each select="//tr[contains(text(),'2')]/following::tr"  до тех  пор пока не будет tr с текстом 2    before "//tr[contains(text(),'2')]"



а как это сделать в XSL по уму?


заранее спасибо
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13585] Пт Фев 20, 2009 02:35

<xsl:apply-templates select="tr[previous-sibling::tr[contains(text(), 2)]][following-sibling::tr[contains(text(), 2)]]" />
Это вставит все внутренние tr. А вообще, лучше с помощью ключей.
А еще лучше, если реальный пример, а не выдуманный приложить. Все может оказаться сложнее или проще.
xbor
Новичок

Зарегистрирован: 07.06.2008
Сообщения: 8

[13587] Пт Фев 20, 2009 12:32

Fireball писал(а):

<xsl:apply-templates select="tr[previous-sibling::tr[contains(text(), 2)]][following-sibling::tr[contains(text(), 2)]]" />
Это вставит все внутренние tr. А вообще, лучше с помощью ключей.
А еще лучше, если реальный пример, а не выдуманный приложить. Все может оказаться сложнее или проще.




Спасибо, попробую с этим вариантом повозится...

а вот конкретный пример:
http://www.exqileague.be/speeldag_live.php?speeldag=87

тут одна большая таблица с данными относящимся к разным играм... Мне нужно собрать эти данные не в одну кучу, а соответсвенно каждой игре.

т.е.
все тр от одного Тр содержащего подобную дату 14/02 20:00 и до следущего.... и.т.д.

спаисбо!
xbor
Новичок

Зарегистрирован: 07.06.2008
Сообщения: 8

[13588] Пт Фев 20, 2009 12:39

п.с.

насколько я понял, ваш вариант всеравно соберет для одного цикла фор ич, все TR которые находятся между всеми tr[text()[contains(.,'2')]]
А мне нужно, в один цикл включить все tr которые находятся между первым и второым tr[text()[contains(.,'2')]], дальше между вторым и третим tr[text()[contains(.,'2')]] и т.д.
т.е. так же, как-будто все данные находятся в разных таблицах и я просто задаю фор ич для каждой таблицы.

п.п.с.
По поводу ключей не совсем понял, можно ссылочку или изи примерчик ?

спасибо!
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13589] Сб Фев 21, 2009 09:56

Ага, я ж говорил, что с реальным примером будет проще разобраться. С ключами группировку нужно: http://xmlhack.ru/books/xslt/ch_11.html#ch_11_01