powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выражение - в знач. переменной
7 сообщений из 7, страница 1 из 1
XPath выражение - в знач. переменной
    #34490315
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Есть такая вещь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<xsl:output method="xml" indent="yes"/>
    <xsl:template name="nachalo">
        <xsl:param name="b"/>
        <xsl:param name="q"/>
        <xsl:variable name="a">
            <xsl:for-each select="$q">
                <xsl:if test="contains($b,current()/@xml:lang)">
                    <xsl:value-of select="current()/@xml:lang"/>
                    <xsl:text> </xsl:text>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="normalize-space($b)=normalize-space($a)">   Все языки из последовательности есть</xsl:when>
            <xsl:otherwise>
                Нехватает: <xsl:value-of select="normalize-space(translate($b,$a,''))"/>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:text>
</xsl:text>
    </xsl:template>
    <xsl:template match="/">
        <result>
            <!-- ========= сравнение  с последовательностью ================ -->
            <xsl:call-template name="nachalo">
                <xsl:with-param name="b" select="'ru fr ja'"/> <!-- последовательность -->
                <xsl:with-param name="q" select="//header"/><!-- с чем сравнивать -->
            </xsl:call-template>
        </result>
<xsl:template>
и документ:
Код: plaintext
1.
2.
3.
4.
 <header xml:lang="ru">Госуд..</header>
 <header xml:lang="fr">The university </header>
 <header xml:lang="ja">rus</header>
 <header xml:lang="en">university2</header>

В результате вот этого
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 <xsl:variable name="a">
            <xsl:for-each select="$q">
                <xsl:if test="contains($b,current()/@xml:lang)">
                    <xsl:value-of select="current()/@xml:lang"/>
                    <xsl:text> </xsl:text>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>
В переменную "а" записывается поселовадтельность из тех элементов которые совпали с значением из переменной "b".
Мне нужно написать как нить этоже но по другому. Одной строкой
Примерно так
Код: plaintext
<xsl:variable name="a" select="$q[contains($b,current()/@xml:lang)]">
То есть мне надо впихнуть все эти ограничения выбора в одно место= место выбора переменных.
Может кто подскажет как?
Подскажите пожалуйста, очень надо , по другому никак нельзя
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34492914
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чём проблема была? Вроде пашет всё.
Код: plaintext
<xsl:variable name="a" select="$q[contains($b,@xml:lang)]"/>
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34493062
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Незнаю как у тебя maXmo, но у меня вылазит ошибка:
SystemID: /home/susa/soft/Schematron/saxonb8-7-3j/reliz/рег.выраж для схемы/Fio2.xsl
Description: A sequence of more than one item is not allowed as the second argument of translate() ("Гос...", "The university", ...)
Все что сделал заменил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 <xsl:variable name="a">
            <xsl:for-each select="$q">
                <xsl:if test="contains($b,current()/@xml:lang)">
                    <xsl:value-of select="current()/@xml:lang"/>
                    <xsl:text> </xsl:text>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>
на это
Код: plaintext
1.
<xsl:variable name="a" select="$q[contains($b,current()/@xml:lang)]">
Может чего не так сделал?, подскажи а то я уже по поводу этого примера нифига не оображаю
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34493090
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по возможности мне бы в последовательность вписать значения атрибутов из этих элементов. Так я смогу вычислить какого языка нехватает для полного счасться.
А так... это работает если убрать:
<xsl:value-of select="normalize-space(translate($b,$a,''))"/>
Но тогда вылезт просто сообщение, что чего то нехватает, а чего именно?
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34493175
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaНезнаю как у тебя maXmo, но у меня вылазит ошибка:
SystemID: /home/susa/soft/Schematron/saxonb8-7-3j/reliz/рег.выраж для схемы/Fio2.xsl
Description: A sequence of more than one item is not allowed as the second argument of translate() ("Гос...", "The university", ...) на русский это переводится как «ошибка при вызове функции translate», которой в моём примере НЕТУ !!!
Что делать зависит от того, что ты хочешь сделать этим транслейтом.
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34493237
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, тогда скажи что выводит у тебя вот этот пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    <xsl:template name="nachalo">
        <xsl:param name="b"/>
        <xsl:param name="q"/>
        <!--<xsl:variable name="a">
            <xsl:for-each select="$q">
                <xsl:if test="contains($b,current()/@xml:lang)">
                    <xsl:value-of select="current()/@xml:lang"/>
                    <xsl:text> </xsl:text>
                </xsl:if>
            </xsl:for-each>
        </xsl:variable>-->
        <xsl:variable name="a" select="$q[contains($b,@xml:lang)]/@xml:lang"/>
        a='<xsl:value-of select="$a"/>'
        b='<xsl:value-of select="$b"/>'
        <xsl:choose>
            <xsl:when test="normalize-space($b)=$a">   Все языки из последовательности есть</xsl:when>
            <xsl:otherwise>
                Нехватает: <!--<xsl:value-of select="normalize-space(translate($b,$a,''))"/>-->
            </xsl:otherwise>
        </xsl:choose>
        <xsl:text>
</xsl:text>
    </xsl:template>
    <xsl:template match="/">
        <result>
            <!-- ========= сравнение  с последовательностью ================ -->
            <xsl:call-template name="nachalo">
                <xsl:with-param name="b" select="'ru fr ja'"/> <!-- последовательность -->
                <xsl:with-param name="q" select="//header"/><!-- с чем сравнивать -->
            </xsl:call-template>
        </result>
    </xsl:template>
На вот этих данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<Office-memo>

 <header xml:lang="ru">Госуд...</header>
 <header xml:lang="fr">The university </header>
 <header xml:lang="ja">rus</header>
 <header xml:lang="en">university2</header>
</Office-memo>
У меня вылазит :
a='ru fr ja'
b='ru fr ja'
Нехватает:
Это из -за того что в "b" - это значение, а в "а" - это Node Set(3)
И хотя на взглад они равны, это не так.
КАК написать правильно, чтобы это соответсвовало друг другу
...
Рейтинг: 0 / 0
XPath выражение - в знач. переменной
    #34493415
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, в одно действие что-то не получается
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выражение - в знач. переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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