forum.bitel.ru http://forum.bitel.ru/ |
|
xalan:nodeset() http://forum.bitel.ru/viewtopic.php?f=14&t=1855 |
Страница 1 из 1 |
Автор: | Jimson [ 27 янв 2009, 22:39 ] |
Заголовок сообщения: | xalan:nodeset() |
<xsl:variable name="xmlsql" select="sql:select('select xml_content from xml_test_table')" /> <xsl:variable name="xmltest" select="$xmlsql/row[1]/@xml_content" /> <xsl:for-each select="xalan:nodeset($xmltest)//*">..... такое будет работать ? с объявленной переменной явно в тексте стиля работает, а если попытаться получить XML текст из базы то for-each не делает итераций вообще, как будто nodeset возращает пустоту P.S. типа да, я пытаюсь извратиться нарисовать сложный отчет... еще такая ерунда <xsl:variable name="sqlq" select="sql:select('select var from testtable')"/> <xsl:variable name="xmltest"> <xsl:for-each select="$sqlq/row"> <spin><xsl:value-of select="@var"/></spin> </xsl:for-each> </xsl:variable> <xsl:for-each select="xalan:nodeset($xmltest)//*"> <fo:block><xsl:value-of select="."/></fo:block> </xsl:for-each> вообщем это тоже не работает как хотелось бы, если вместо <xsl:value-of select="@var"/> вставить просто текст какой то то все получается как и ожидается, вылазит нестолько раз (ровно столько сколько было в итераций по $sqlq/row) этот текст, а при попытке вытащить значение @var выходит пустота, я подохреваю что тут проблема в контексте из которого я пытаюсь вытащить этот @var, он этот атрибут ищет в <spin> ? тогда как обратится к текущему $sqlq/row ? через parent::*/@var тоже не выходит P.P.S. тяжко очень осваивается xslt, все доки какие то непонятные нифига, даже о'рейли не помогает, реальных возможностей что то напрограмить в xslt нету, и что самое обидное в mysql тоже (из за ущербности хранимых функций и отсутсвии нормально plsql), все мои идеи упираются в стенки ![]() |
Автор: | Jimson [ 04 фев 2009, 04:20 ] |
Заголовок сообщения: | |
* бьюсь головой в монитор в истерике скажите как обойди колючую проволоку и вытащить из базы XML в чистом виде, который затем можно обработать аплай темплейтом или for-each ![]() |
Автор: | Администратор [ 04 фев 2009, 17:31 ] |
Заголовок сообщения: | |
C nodeset не работал.. Как вариант - можете написать Java расширение, скомпилить, подключить и использовать.. P.S. Кинул в TODO возможность вызова BGBS функций в шаблонах. |
Автор: | Jimson [ 04 фев 2009, 20:58 ] |
Заголовок сообщения: | |
nodeset это обычный обман интерпритатора XSL, лечение недостатка XSL 1.0, суть в том что там отдельный тип данных какой то RFT или чет такое, типа конечный узел XML, который не совпадает с типом данным XML не помню уже слова правильные, но <xsl:variable name=var"> <MYELEM> <SUBELEM></SUBELEM> </MYELEM> </xsl:variable> с точки зреня XSl 1.0 не является XML деревом, и заюзать его например через <xsl:for-each select="$var/node()"> нельзя, для этого все интерпритаторы включая xalan реализуют функцию nodeset, приведение типа <xsl:for-each select="xalan:nodeset($var)/Node()"> к теме возврата из SQLQuery XML это все врядли отношение имеет, так как походу вы квотите угловые скобки в значениях вытаскиваемых из mysql, расскажите хотя бы что вы делаете, может можно будет востановить эти симворы через replace.... Администратор писал(а): C nodeset не работал.. Как вариант - можете написать Java расширение, скомпилить, подключить и использовать..
с удовольствием, если расскажите хотя бы примерно что читать на эту тему кроме собственно док по програмирования на жаве ) точнее куда именно копать на тему сопряжения XSL интепритатора внутри билинга со своими расширениями и где описана структура классов которые устроят XSL интерпритатор |
Автор: | Администратор [ 05 фев 2009, 12:55 ] |
Заголовок сообщения: | |
Начните отсюда: http://wiki.bgbilling.ru/index.php/XSLT http://wiki.bitel.ru/index.php/XSLT Его устроит любой Java класс, только там ограничены типы параметров и возвращаемых методами результатов. Класс должен быть подключен в CLASSPATH сервера биллинга, как сделать - смотрите доки по Java. |
Автор: | Jimson [ 06 фев 2009, 03:17 ] |
Заголовок сообщения: | |
Попробовал объявить компонент на javascript и опять обломался <xalan:component prefix="race" functions="getdate"> <xalan:script lang="javascript"> function getdate(numdays) { return "превед красавчег"; } </xalan:script> </xalan:component> враги не пройдут ? ![]() http://xml.apache.org/xalan-j/extensions.html P.S. нашел вроде доки по типам и примерчики как расширять xsl своими класами, будем пробовать, спасиб заодно нашел описание как в FOp делать несколько колонок на странице, вообще жара ![]() |
Автор: | Jimson [ 24 фев 2009, 00:35 ] |
Заголовок сообщения: | |
не подскажете чем отличается <xsl:variable name="xx" select="sql:select( $query )" /> от <xsl:variable name="xx"> <xsl:value-of select="sql:select( $query )" /> </xsl:variable> уже сил никаких нет, мало припонов со стороны собственно стандартов таблиц стилей, так еще начинается явный глюкодром даже xalan:nodeset() не помагает во втором варианте, пустое дерево, хотя если переписать через variable select то все нормально, за идентичность запроса и его корректность я отвечаю руками... |
Автор: | Jimson [ 24 фев 2009, 03:39 ] |
Заголовок сообщения: | |
Реально убрать мат на пустой query ? Я пытаюсь закрыть условиями часть обращений к базе данных, пытался сделать условие так <xsl:variable name="result"> <xsl:if test="...." <xsl:value-of select="sql:select( $query )" /> </xsl:if> </xsl:variable> в result при этом выходит какая то каша полная, даже xalan:nodeset не может там ничего живого найти ок, пытаюсь как обычно костылями обойтись <xsl:variable name="query"> <xsl:if test="...." SELECT ....... </xsl:if> </xsl:variable> <xsl:variable name="result" select="sql:select( $query )" /> получаем 200 строк мата в логи о великой беде: ERROR 24.02.2009 00:01:05 Error on query: Query was empty com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Query was empty щас прийдется вместо xsl:if совать choose и в otherwise писать что то вроде 'select 1 as preved' |
Автор: | Amir [ 25 фев 2009, 16:57 ] |
Заголовок сообщения: | |
<xsl:variable name="xx" select="sql:select( $query )" /> тип variable будет типом возвращенного значения (string, int, etc.) <xsl:variable name="xx"> <xsl:value-of select="sql:select( $query )" /> </xsl:variable> тип variable будет только string <xsl:variable name="query"> <xsl:if test="...." SELECT ....... </xsl:if> </xsl:variable> здесь похоже условие if не отрабатывает и получаем sql:select( '' ) а за ним Error on query: Query was empty попробуйте так <xsl:variable name="xx" select="sql:select( $query )[$condition]" /> |
Автор: | Jimson [ 25 фев 2009, 22:51 ] | ||
Заголовок сообщения: | |||
не очень понял при чем тут предикат... у меня как раз проблема была в том что бы условиями заблокировать обращения к БД когда параметров не хватает, те если у меня не определен ID то запрос просто превращается в пустую строку и sql:select молча возвращает пустоту и не парится, а уже мои проблемы дальше проверить что у меня запрос вернул пустоту вообщем прикладываю свою версию ацкой "фактуры", с актами и детализациями по IPN и VoIP, может кому пригодится в качестве example по извращениям на XSL, вариант не окончательный в плане оформления p.s. да и... печается нормально это только через сохранение в PDF и печать через акробат, FO визуализация и печать коряво обращаются с мелкими объектами, например таблица которая в PDF имеет на страницу 180 строк на печати через FO получается на 210+ строк, не говорю уже про теряющиеся стили border's и тп.
|
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |