Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Не работает translate в xslt


Автор: vinograd2008 29.10.2011, 22:41
Есть пример перевода символов в верхний регистр. Почему символ А не переводится в верхний регистр. То есть он как бы переводится а при переходе по ссылке выдает что файл не найден хотя файл есть. Думаю дело в функции translate что может быть тут неправильно и как изменить чтоб заработало?

Код


<xsl:variable name="req1">
<xsl:value-of select="substring(normalize-space(.),1,1)" />
</xsl:variable>

<xsl:variable name="req">
<xsl:value-of select="translate($req1,'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')" />.xml#
<xsl:value-of select="translate($req1,'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')" />
<xsl:value-of select="substring(normalize-space(.),2,50)" />
  </xsl:variable>

<a href="{$req}">
 <xsl:value-of select="/Root/Fruits" />
</a>



Автор: magelan 29.10.2011, 23:35
Здесь дело не в транслите, а в бесконечной рекурсии, которую вы объявили, пытаясь в переменой рек обратится к переменной рек. 

Автор: vinograd2008 30.10.2011, 09:39
Извините забыл указать строку сейчас отредактировал не похоже что дело в бесконечной рекурсиии если даже у меня переменные называются по разными то все равно translate для буквы А не работает. Объясните что не так в этом коде.

Автор: magelan 30.10.2011, 11:44
Взял ваш код, подставил значения:
Код

<xsl:template match="/">
    <xsl:variable name="req1" select="substring(normalize-space('абвуфх'),1,1)" />
    <xsl:variable name="req">
        <xsl:value-of select="translate($req1,'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
            'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')" />.xml#
        <xsl:value-of select="translate($req1,'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
            'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')" />
        <xsl:value-of select="substring(normalize-space('абвуфх'),2,50)" />
    </xsl:variable>
    <a href="{$req}">
        <xsl:value-of select="'ant text'" />
    </a>
</xsl:template>

на выходе получил:
Код

<a href="А.xml#&#xA;        Абвуфх">ant text</a>

что не так?
не надо грешить на функции трансформера, они отлажены миллионами людей... ваши проблемы скорее всего в неправильных данных на вход, странно что мой первый пост не заставил вас их проверить...  там, например, может быть английская "э", которая естественно не будет меняться, т.к. вы не определили для нее правила.

Автор: vinograd2008 30.10.2011, 15:10
Так то она работает вроде переводит из нижнего регистра в верхний да показывает при наведении на ссылку, но при переходе по этой ссылке ссылка из такого вида:
 file:///D:/ППР%20по%20РРП/А.xml#Абвуфх
превращается вот в такой 
D:\ППР по РРП\A.xml и переход не осуществляется.

Входные данные проверил ничего английского у меня нет только русский текст.

Автор: magelan 30.10.2011, 16:27
сделайте только английский все будет работать. XSL тут вообще не при чем, это особенности работы со ссылками у браузеров.
Чтобы ссылка с русскими буквами не видоизменялась, используйте onclick и перенаправляйте скриптом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)