Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Предшествующие и последующие узлы 
:(
    Опции темы
walek
Дата 22.3.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.11.2009

Репутация: нет
Всего: нет



Привет.

Допустим у меня есть такой xml:

Код

<channel>
...
<item>
  <ID>1605540</ID>
  <category>Политика</category>
  <title>Заголовок 1</title>
</item>
<item>
  <ID>1605547</ID>
  <category>Политика</category>
  <title>Заголовок 2</title>
</item>
<item>
  <ID>1605544</ID>
  <category>Общество</category>
  <title>Заголовок 3</title>
</item>
<item>
  <ID>1605541</ID>
  <category>Общество</category>
  <title>Заголовок 4</title>
</item>
<item>
  <ID>1605551</ID>
  <category>Культура</category>
  <title>Заголовок 5</title>
</item>
<item>
  <ID>1605570</ID>
  <category>Культура</category>
  <title>Заголовок 6</title>
</item>
...
</channel>


Мне нужно получать в текущем узле item[ID=$ArtID], где $ArtID=1605544, берется из <xsl:param name="ArtID" select="ID" /> получать название предыдущей и последующей категорий. Привёл кусочек xml, потому что item много, но логика думаю понятна. Категорий 16 и у каждой несколько статей.

Делаю так:

Код

<xsl:key name="key-category" match="item" use="category" />
<xsl:template match="channel">
  <xsl:apply-templates select="item[generate-id(.)=generate-id(key('key-category', category))][ID=$ArtID]" />
</xsl:template>

<xsl:template match="item">
  <xsl:value-of select="preceding-sibling::item[not(category=current()/category)]/category" />
  <xsl:value-of select="following-sibling::item[not(category=current()/category)]/category" />
</xsl:template>


Последующая категория вытаскивается, а предшествующая нет. Что не так?
Спасибо.


PM MAIL   Вверх
magelan
Дата 23.3.2011, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



У меня работает, правда я срезал нафиг ключи и выставил позицию, без позиции тоже работало но не правильно
Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt">

<xsl:key name="key-category" match="item" use="category" />
<xsl:template match="channel">
  <xsl:apply-templates select="item[ID='1605551']" />
</xsl:template>
<xsl:template match="item">
  <xsl:value-of select="preceding-sibling::item[not(category=current()/category)][1]/category" />
  <xsl:value-of select="following-sibling::item[not(category=current()/category)][1]/category" />
</xsl:template>

</xsl:stylesheet>


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.