Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > XSLT и вызов java метода. не понимаю :( |
Автор: Sleepy_PIP 18.4.2006, 17:09 | ||
вот, приведу начало xslt-ника:
беру нужный для него xml-ник, гружу в Altova XMLSpy, натравливаю на него этот xslt-ник и получаю ошибку на <xsl:variable name="pip" select="math:sqrt(10.1)"/> о том, что Function not in namespace. А как-же так? xmlns:math="java.lang.Math" - есть ведь! В чем я не прав? Спасибо! |
Автор: ALKS 18.4.2006, 18: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 ничего общего... |
Автор: Sleepy_PIP 19.4.2006, 12:06 | ||
вот. добился. привожу результат. 1. SMXSpy ничего про Xalan не знает, от сбда и все проблеммы. Пришлось отлаживать путем многокр. запусков web приложения где все это используется ![]() вот xslt (часть):
теперь все прекрасно работает. с Xalan надо пользовать типа xmlns:CONS="xalan://com.*.business" и очень дуратская система работы с созданным объектом и его методами java:format($dfmt,$cur_date)) - где dfmt - объект тиа DateFormat, возврящаемый по CONST.getHumanDateFormat() т.е. написать типа CONS:CONST.getHumanDateFormat().format($cur_date) - нельзя! ![]() информация почерпнута из http://xml.apache.org/xalan-j/extensions.html#java-namespace А может кто посоветовать XML редактор с XSLT преобразователем, который может использовать Xalan? Спасибо! |
Автор: ALKS 19.4.2006, 12:21 |
Я пользуюсь этим: http://www.editix.com/release.html Он позволяет подключать произвольный JAXP compaible парсер и/или трансформер(и Хalan естественно в том числе) можно играть с разными имплементациями и их версиями, как следствие. да и вообще мощный, полноценный XML-Editor. P.S. Не знал что Xalan такое умеет. Но я бы в любом случае так не делал. твой XSL, подозреваю, не переносим теперь даже между различными имплементациями JAXP а про мир вне Java даже реч не идет... |
Автор: Sleepy_PIP 19.4.2006, 16:22 |
To ALKS & LSD - большое СПАСИБО за наводки. правда Stylus платный. а я бедный довольно сильно как и контора. То ALKS я пользую xslt-fo - с сериалайзером в эсель (xls). В исходном XML нет и не будет даты генерации отчета. А юзера хотят дату и время в эеселе. Что-бы Вы предложили? Добавлено @ 16:25 блин. я хотел сказать Exсel ![]() |
Автор: ALKS 19.4.2006, 17:44 |
![]() если у вас нету куска пластелина то вы не cможете показать другу слепленный из пластилина кубик ![]() ![]() |
Автор: Sleepy_PIP 19.4.2006, 19:06 |
To ALKS (к сожалению - цитирование НЕ работает - это МОДЕРАТОРАМ и сисопам! - просто цитириуем а потом ссылки по предв. просмотру и публикации - просто ничего не делают) Увы, вынужден Вас огорчить. Генерация xml варианта отчета ни одному пользователю лично у нас не нужна, посему именно сразу после генерации накладывается преобразование в нужный (и выбранный пользователем ) формат. Если у Вас по другому - я опускаю кисточку и палитру перед Вами! ![]() Так вы так и не ответили мне на простой вопрос - как получить _правильно_ с точки зрения xslt дату генерации отчета если ее нет в исходном xml. Извините - xml исходный уже не подправить - по разделению прав (дуратскому, принятому только с внедрением XSLT) источник генерации xml уже не доступен ![]() Итак? Конечно дурных отзывов можно написать много, что не правильно учтена постановка задачи для входного xml к примеру. Ага. только требование вот понимаете, народилось гораздо позже, чем была произведена постановка задачи на xml входной. Право слово - порой кажется что некоторые сидят (я не про Вас конкретно) на разовой работе - получил ТЗ детерминированное, сделал - отвалил ... вот и результат кстати, который я и обсуждаю ... Бога Ради! простите за резкость. но надоели разовые решения и размазывание алгоритмов по всяческим технологиям. Все ведь просто - был-бы класс, генерирующий БЕЗ xslt прямой XLS - поправил-бы я его и все ... а тут ... А ведь простейшая проблемка -то возникла. а сколько трудов ..., съеденнго инета, напряжения других людей. Итак - все-ж жду предложений как это сделать не прибегая к вызовам java методов в xslt ... PS: простите все, я не гуру в XSLT но блин - из-за одной даты потратил более 4-х часов.... никуда не годится ... Добавлено @ 19:09 прикольно. у меня часы кажут 20:08 (время -2 минуты публикации мессага) а пред. письмо по часам сайта Дата 19.4.2006, 19:06 (ссылка) эээ. вроде не есть хорошо. |
Автор: ALKS 19.4.2006, 20:55 | ||
А я тебе уже давал линк ![]()
Xalan последней версии это умеет, как и заявлено на сайте EXSLT. я проверил. а вот как эту дату форматировать это уже вопрос второй. ![]() Вообще 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/ - что ещё нужно для счастья? |