Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Последовательности / 6 сообщений из 6, страница 1 из 1
03.05.2007, 09:35
    #34501132
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
Доброго время суток.
Недавно я поднимал тему Xpath выражения в знач. переменной , вроде так называлась.
В общем такая реализация начальство не удовлетворила. Теперь пытаюсь написать ту же х...нь с помощью последовательностей.
Пока безуспешно. Нигде немогу найти достойного описания применения последовательностей с примерами (на zvon.org смотрел, туда не посылать).
В общем задача такая: В виде параметров передаются два значения. Где искать и последовательность значений которая должна быть в том месте.
К примеру. есть
<a xml:lang="ru"/>
<a xml:lang="fr"/>
<a xml:lang="de"/>
И последовательность "('fr', 'ru')"
Как написать проверку которая бы проверила есть ли языки из последовательности в значениях атрибутов группы тегов "а".
По возможности сделать это функцией. тоесть ответ должен быть обязательно(либо положительный, либо отрецательный)
Если кто то не понял вопроса, подробнее можно посмотреть на ссылке написанной выше.
Помогите плиззз.
...
Рейтинг: 0 / 0
03.05.2007, 18:38
    #34503290
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
чем функция отличается от темплейта?
могу сделать в виде темплейта, там ты просил сделать в одно действие – у меня не получилось, но в несколько действий это свободно делается.
...
Рейтинг: 0 / 0
03.05.2007, 18:47
    #34503311
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
Сделай плиз уже хоть как нибудь.
Сам тоже седня одну фигню придумал, если удастся завтра выложу.
Но чем больше вариантов тем легче от начальства обиваться :)
...
Рейтинг: 0 / 0
03.05.2007, 19:08
    #34503354
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<xsl:call-template name="zzz">
 <xsl:with-param name="nodes" select="a"/>
 <xsl:with-param name="langs">
  <xsl:text>ru</xsl:text><xsl:text>fr</xsl:text><xsl:text>de</xsl:text>
 </xsl:with-param>
</xsl:call-template>

<xsl:template name="zzz">
 <xsl:param name="nodes"/>
 <xsl:param name="langs"/> – тут коллекция
 <xsl:for-each select="$langs">
  <xsl:choose>
   <xsl:when test="$nodes[.=current()]">
    <xsl:value-of select="."/> есть
   </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="."/> нету
   </xsl:otherwise>
  </xsl:choose>
 </xsl:for-each>
</xsl:template>
как-то так
...
Рейтинг: 0 / 0
04.05.2007, 10:42
    #34504174
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
Спасибо, подошло.
Токо маленько поправить пришлось, вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template name="zzz">
        <xsl:param name="nodes"/>
        <xsl:for-each select="$seqLang">
           <xsl:choose>
                <xsl:when test="$nodes[@xml:lang=current()]">
                   ' <xsl:value-of select="."/>' есть
                </xsl:when>
                <xsl:otherwise>
                    '<xsl:value-of select="."/>' нету
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
А последовательность вынести в параметр
Код: plaintext
1.
2.
<xsl:param name="seqLang" as ="item()*">
        <xsl:sequence select='("ru", "fr", "de")'/>
    </xsl:param>
И вызов шаблона с одним параметром стал.
...
Рейтинг: 0 / 0
04.05.2007, 10:48
    #34504202
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательности
Своя реализация не получилась, идея была такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
<xsl:variable name="c" select="//header[2]/@xml:lang"/>
        c='<xsl:value-of select="$c"/>'
            <xsl:if test="boolean(index-of($seqLang,$c))">        
        <xsl:variable name="b">
            <xsl:value-of select="remove($seqLang, index-of($seqLang,$c))"/>
        </xsl:variable>
B='<xsl:value-of select="$b"/>'
</xsl:if>
То есть. Брать последовательность, брать текущее значение атрибута, если оно имело место быть в последовательности, находить его позицию, после чего крамсать исходную последовательность
В конце проверить ее
Код: plaintext
<xsl:value-of select="fn:empty($seqLang)">
Если бы она оказалась нулевой, то все языки встретелись, иначе бы чего то нехватало.
Вполне реализуемо если бы ни одна загвозка : //header[2]/@xml:lang - нужно указывать позицию, в цикле провернуть не смог, изврат не прошел, может не достаточно искусно написал.
Ладно, спасибо за помощь
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Последовательности / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]