powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Последовательности
6 сообщений из 6, страница 1 из 1
Последовательности
    #34501132
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго время суток.
Недавно я поднимал тему Xpath выражения в знач. переменной , вроде так называлась.
В общем такая реализация начальство не удовлетворила. Теперь пытаюсь написать ту же х...нь с помощью последовательностей.
Пока безуспешно. Нигде немогу найти достойного описания применения последовательностей с примерами (на zvon.org смотрел, туда не посылать).
В общем задача такая: В виде параметров передаются два значения. Где искать и последовательность значений которая должна быть в том месте.
К примеру. есть
<a xml:lang="ru"/>
<a xml:lang="fr"/>
<a xml:lang="de"/>
И последовательность "('fr', 'ru')"
Как написать проверку которая бы проверила есть ли языки из последовательности в значениях атрибутов группы тегов "а".
По возможности сделать это функцией. тоесть ответ должен быть обязательно(либо положительный, либо отрецательный)
Если кто то не понял вопроса, подробнее можно посмотреть на ссылке написанной выше.
Помогите плиззз.
...
Рейтинг: 0 / 0
Последовательности
    #34503290
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем функция отличается от темплейта?
могу сделать в виде темплейта, там ты просил сделать в одно действие – у меня не получилось, но в несколько действий это свободно делается.
...
Рейтинг: 0 / 0
Последовательности
    #34503311
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай плиз уже хоть как нибудь.
Сам тоже седня одну фигню придумал, если удастся завтра выложу.
Но чем больше вариантов тем легче от начальства обиваться :)
...
Рейтинг: 0 / 0
Последовательности
    #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
Последовательности
    #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
Последовательности
    #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
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Последовательности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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