BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 20:37

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: xalan:nodeset()
СообщениеДобавлено: 27 янв 2009, 22:39 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
<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), все мои идеи упираются в стенки :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 фев 2009, 04:20 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
* бьюсь головой в монитор в истерике

скажите как обойди колючую проволоку и вытащить из базы XML в чистом виде, который затем можно обработать аплай темплейтом или for-each :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 фев 2009, 17:31 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
C nodeset не работал.. Как вариант - можете написать Java расширение, скомпилить, подключить и использовать..
P.S. Кинул в TODO возможность вызова BGBS функций в шаблонах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 04 фев 2009, 20:58 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
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 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Начните отсюда:
http://wiki.bgbilling.ru/index.php/XSLT
http://wiki.bitel.ru/index.php/XSLT

Его устроит любой Java класс, только там ограничены типы параметров и возвращаемых методами результатов.

Класс должен быть подключен в CLASSPATH сервера биллинга, как сделать - смотрите доки по Java.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2009, 03:17 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
Попробовал объявить компонент на 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 делать несколько колонок на странице, вообще жара :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 фев 2009, 00:35 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
не подскажете чем отличается

<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 то все нормально, за идентичность запроса и его корректность я отвечаю руками...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 фев 2009, 03:39 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
Реально убрать мат на пустой 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'


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 фев 2009, 16:57 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
<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]" />


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 фев 2009, 22:51 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
не очень понял при чем тут предикат...
у меня как раз проблема была в том что бы условиями заблокировать обращения к БД когда параметров не хватает, те если у меня не определен ID то запрос просто превращается в пустую строку и sql:select молча возвращает пустоту и не парится, а уже мои проблемы дальше проверить что у меня запрос вернул пустоту

вообщем прикладываю свою версию ацкой "фактуры", с актами и детализациями по IPN и VoIP, может кому пригодится в качестве example по извращениям на XSL, вариант не окончательный в плане оформления

p.s. да и... печается нормально это только через сохранение в PDF и печать через акробат, FO визуализация и печать коряво обращаются с мелкими объектами, например таблица которая в PDF имеет на страницу 180 строк на печати через FO получается на 210+ строк, не говорю уже про теряющиеся стили border's и тп.


Вложения:
Комментарий к файлу: не советую пытаться программировать на XSL :)
race_invoice_pdf.rar [10.32 КБ]
Скачиваний: 405
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.039s | 36 Queries | GZIP : On ]