Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSLT и вызов java метода. не понимаю :(, не получается sqrt вызвать банально 
:(
    Опции темы
Sleepy_PIP
Дата 18.4.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



вот, приведу начало xslt-ника:
Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="math"
    extension-element-prefixes="math" 
    xmlns:gmr="http://www.gnome.org/gnumeric/v7"
    xmlns:math="java.lang.Math">

    <xsl:import href="search_result_xls.xsl" />
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" encoding="UTF-8"/>

    <xsl:variable name="rows_with_shipping" select="count( /result-set/rows/row[ cell[@path='/IncludeShipping'][@alias='app']/@value='1' ] )"/>
    <xsl:variable name="rows_without_shipping" select="count( /result-set/rows/row[ cell[@path='/IncludeShipping'][@alias='app']/@value='0' ] )"/>
    <xsl:variable name="rows_params" select="count( /result-set/query-params/param[ @visible = 'true' ] )" />
    <xsl:variable name="columns">17</xsl:variable>
    <xsl:variable name="pip" select="math:sqrt(10.1)"/>
.....


беру нужный для него xml-ник,
гружу в Altova XMLSpy, натравливаю на него этот xslt-ник и получаю ошибку на 
    <xsl:variable name="pip" select="math:sqrt(10.1)"/>
о том, что Function not in namespace.
А как-же так?
    xmlns:math="java.lang.Math" - есть ведь!
В чем я не прав?
Спасибо!

 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
ALKS
Дата 18.4.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



вот это: 
xmlns:math="java.lang.Math"
меня напугало.

может быть я не прав, но вообще math:sqrt это из EXSLT. подключать надо так: 
xmlns:math="http://exslt.org/math"

что такое EXSLT смотреть тут: http://www.exslt.org

но это пол беды. еще твой JAXP compatible transformer должен это суметь сожрать. потому как нужно чтобы была имплементация EXSLT...

и еще одно XMLSpy это не java-мир. не факт, что то что успешно отработает в XMLSpy будет так же прекрасно работать c используемыми тобой JAXP compatible имплементациями...

ну и вдогонку: есть еще стандарт XSLT 2.0 который держет custom функции. деталей я к сожалению не знаю, но знаю что sqrt таким образом можно описать и что Saxon8-B поддерживает XSLT 2.0. 

P.S. вообще нужно понимать, что стандарты XSLT не имеют с Java ничего общего... 

Это сообщение отредактировал(а) ALKS - 18.4.2006, 18:14
PM   Вверх
Sleepy_PIP
Дата 19.4.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



вот. добился. привожу результат.
1. SMXSpy ничего про Xalan не знает, от сбда и все проблеммы. Пришлось отлаживать путем многокр. запусков web приложения где все это используется smile(((((.

вот xslt (часть):
Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="java CONS"
    extension-element-prefixes="java CONS" 
    xmlns:gmr="http://www.gnome.org/gnumeric/v7"
        xmlns:CONS="xalan://com.*.business"
        xmlns:java="xalan://java">

    <xsl:import href="search_result_xls.xsl" />
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" encoding="UTF-8"/>

    <xsl:variable name="rows_with_shipping" select="count( /result-set/rows/row[ cell[@path='/IncludeShipping'][@alias='app']/@value='1' ] )"/>
    <xsl:variable name="rows_without_shipping" select="count( /result-set/rows/row[ cell[@path='/IncludeShipping'][@alias='app']/@value='0' ] )"/>
    <xsl:variable name="rows_params" select="count( /result-set/query-params/param[ @visible = 'true' ] )" />
    <xsl:variable name="columns">17</xsl:variable>
    <xsl:variable name="cur_date" select="java:util.Date.new()"/>
    <xsl:variable name="dfmt" select="CONS:CONST.getHumanDateFormat()"/>

    <xsl:template match="/">
        <gmr:Workbook xmlns:gmr="http://www.gnome.org/gnumeric/v7">
            <gmr:SheetNameIndex>
                <gmr:SheetName>main</gmr:SheetName>
            </gmr:SheetNameIndex>
            <gmr:Sheets>
                <gmr:Sheet>
                    <gmr:Name>main</gmr:Name>
                    <gmr:MaxCol>-1</gmr:MaxCol>
                    <gmr:MaxRow>-1</gmr:MaxRow>
                    <!--<gmr:Zoom>0.75</gmr:Zoom>-->
                    <gmr:Scale type="percentage" percentage="75"/>

                    <xsl:call-template name="styles" />

                    <gmr:Cells>

                        <!-- write caption -->
                        <gmr:Cell Row="0" Col="5" ValueType="60">
                            <xsl:value-of select="concat(/result-set/@caption,' ',java:format($dfmt,$cur_date))"/> 
                        </gmr:Cell>
.....


теперь все прекрасно работает.
с Xalan надо пользовать
типа
        xmlns:CONS="xalan://com.*.business"
и очень дуратская система работы с созданным объектом и его методами
java:format($dfmt,$cur_date)) - где dfmt - объект тиа DateFormat, возврящаемый по CONST.getHumanDateFormat()

т.е. написать типа CONS:CONST.getHumanDateFormat().format($cur_date) - нельзя! smile((.

информация почерпнута из 
http://xml.apache.org/xalan-j/extensions.html#java-namespace

А может кто посоветовать XML редактор с XSLT преобразователем, который может использовать Xalan?
Спасибо! 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
ALKS
Дата 19.4.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



Я пользуюсь этим:
http://www.editix.com/release.html

Он позволяет подключать произвольный JAXP compaible парсер и/или трансформер(и Хalan естественно в том числе) можно играть с разными имплементациями и их версиями, как следствие. да и вообще мощный, полноценный XML-Editor.

P.S. Не знал что Xalan такое умеет. Но я бы в любом случае так не делал. твой XSL, подозреваю, не переносим теперь даже между различными имплементациями JAXP а про мир вне Java даже реч не идет... 
PM   Вверх
LSD
Дата 19.4.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Sleepy_PIP @  19.4.2006,  13:06 Найти цитируемый пост)
А может кто посоветовать XML редактор с XSLT преобразователем, который может использовать Xalan?

Попробуй Stylus Studio XML, по моему он поддерживает Xalan. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sleepy_PIP
Дата 19.4.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



To ALKS & LSD - большое СПАСИБО за наводки. правда Stylus платный. а я бедный довольно сильно как и контора.

То ALKS
я пользую xslt-fo - с сериалайзером в эсель (xls).
В исходном XML нет и не будет даты генерации отчета. А юзера хотят дату и время в эеселе.
Что-бы Вы предложили?

Добавлено @ 16:25 
блин. я хотел сказать Exсel smile ... извините! 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
ALKS
Дата 19.4.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



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

если у вас нету куска пластелина то вы не cможете показать другу слепленный из пластилина кубик smile как бы сильно ваш друг не хотeл это увидеть smile  

Это сообщение отредактировал(а) ALKS - 19.4.2006, 17:45
PM   Вверх
Sleepy_PIP
Дата 19.4.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: 4
Всего: 12



To ALKS (к сожалению - цитирование НЕ работает - это МОДЕРАТОРАМ и сисопам! - просто цитириуем а потом ссылки по предв. просмотру и публикации - просто ничего не делают)

Увы, вынужден Вас огорчить.
Генерация xml варианта отчета ни одному пользователю лично у нас не нужна, посему именно сразу после генерации накладывается преобразование в нужный (и выбранный пользователем ) формат.
Если у Вас по другому - я опускаю кисточку и палитру перед Вами! smile.
Так вы так и не ответили мне на простой вопрос - как получить _правильно_ с точки зрения xslt дату генерации отчета если ее нет в исходном xml.
Извините - xml исходный уже не подправить - по разделению прав (дуратскому, принятому только с внедрением XSLT) источник генерации xml уже не доступен smile.
Итак?
Конечно дурных отзывов можно написать много, что не правильно учтена постановка задачи для входного xml к примеру. 
Ага. только требование вот понимаете, народилось гораздо позже, чем была произведена постановка задачи на xml входной.
Право слово - порой кажется что некоторые сидят (я не про Вас конкретно) на разовой работе - получил ТЗ детерминированное, сделал - отвалил ...
вот и результат кстати, который я и обсуждаю ...
Бога Ради! простите за резкость. но надоели разовые решения и размазывание алгоритмов по всяческим технологиям.
Все ведь просто - был-бы класс, генерирующий БЕЗ xslt прямой XLS - поправил-бы я его и все ... а тут ...
А ведь простейшая проблемка -то возникла. а сколько трудов ..., съеденнго инета, напряжения других людей.
Итак - все-ж жду предложений как это сделать не прибегая к вызовам java методов в xslt ...
PS: простите все, я не гуру в XSLT но блин - из-за одной даты потратил более 4-х часов.... никуда не годится ...

Добавлено @ 19:09 
прикольно. у меня часы кажут 20:08 (время -2 минуты публикации мессага)
а пред. письмо по часам сайта
Дата 19.4.2006, 19:06 (ссылка)

эээ. вроде не есть хорошо. 
 
 


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
ALKS
Дата 19.4.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



А я тебе уже давал линк smile - http://www.exslt.org/date/functions/date/index.html

Код

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <xsl:value-of select="date:date()"/>:
    </xsl:template>
</xsl:stylesheet>


Xalan последней версии это умеет, как и заявлено на сайте EXSLT. я проверил.

а вот как эту дату форматировать это уже вопрос второй. smile  

Вообще Sleepy я тебе настоятельно рекомендую разобраться с EXSLT, хотя бы потому что EXSLT достаточно широко поддерживается за пределами java трансформатерров (я почти на 100% уверен что например XMLSpy поймёт EXSLT) и IMHO это более правильный путь чем неявный вызов JAVA API. 

P.S. вообще лично я использую Saxon а не Xalan. главным образом потому что SAXON поддерживает XSLT 2.0 и XPath 2.0. а XPath 2.0 это вот: http://www.w3.org/TR/2001/WD-xquery-operators-20011220/  -  что ещё  нужно для счастья?

  

Это сообщение отредактировал(а) ALKS - 19.4.2006, 21:19
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.