Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выражение - в знач. переменной / 7 сообщений из 7, страница 1 из 1
26.04.2007, 15:57
    #34490315
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
Всем привет.
Есть такая вещь
Код: 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
27.04.2007, 14:01
    #34492914
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
а в чём проблема была? Вроде пашет всё.
Код: plaintext
<xsl:variable name="a" select="$q[contains($b,@xml:lang)]"/>
...
Рейтинг: 0 / 0
27.04.2007, 14:36
    #34493062
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
Незнаю как у тебя 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
27.04.2007, 14:44
    #34493090
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
по возможности мне бы в последовательность вписать значения атрибутов из этих элементов. Так я смогу вычислить какого языка нехватает для полного счасться.
А так... это работает если убрать:
<xsl:value-of select="normalize-space(translate($b,$a,''))"/>
Но тогда вылезт просто сообщение, что чего то нехватает, а чего именно?
...
Рейтинг: 0 / 0
27.04.2007, 15:01
    #34493175
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
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
27.04.2007, 15:15
    #34493237
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
Ладно, тогда скажи что выводит у тебя вот этот пример:
Код: 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
27.04.2007, 15:53
    #34493415
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XPath выражение - в знач. переменной
не, в одно действие что-то не получается
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выражение - в знач. переменной / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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