|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
Конечно на ум сразу приходит использовать цикл: Код: xml 1. 2. 3.
например, нужно вывести данные по заказчикам: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
чтобы это сделать, нужно организовать вот такой классический цикл: Код: xml 1. 2. 3. 4. 5. 6.
в итоге имеем нужные 2-е колонки: Код: html 1. 2. 3. 4.
Но это всё для вывода неизвестного заранее кол-ва строк, а если неизвестно кол-во колонок? Например, нужно посчитать кол-во сделанных этими клиентами заказов за заданный параметром период, чтобы было вот так: Код: html 1. 2. 3. 4.
В xslt я передаю в качестве параметра кол-во колонок, т.е. знаю, что в этот раз их будет 3 (Январь, Февраль и Март). Но как написать универсальный код рассчитанный на любое значение этого параметра? Допустим, колонки в результирующем датасете, содержащие кол-во заказов по месяцам будут именоваться по определённому правилу, например так: QTY_1, QTY_2, QTY_3,..,QTY_N. И названия колонок в итоговой таблице тоже: К1, К2, К3,...,КN. (где N - кол-во колонок, т.е. месяцев, т.е. значение передаваемого в xslt параметра). Как правильно организовать цикл. Может быть можно как то особым образом использовать тэг colspan ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 12:28 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
я хотел бы уточнить, что на входе в преобразование XSLT имеется XML подобный этому: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
а на выходу преобразования получается HTML. Этот входной XML формируется динамически (есть генератор XML-файла, в этот генератор передаётся параметром кол-во месяцев), т.е. в общем схематичном виде он может будет таким: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Обработать узел </customer>, т.е. переменное кол-во заказчиков соответствующее строкам <TR> - не проблема, используем цикл <xsl:for-each>, а вот как обработать переменное кол-во заказов у каждого заказчика по месяцам, соответствующее ячейке в строке <TD> ? В XSLT преобразовании я буду знать кол-во месяцев благодаря тегу <months_qty> из исходного XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 14:54 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
Все просто. Циклы организовываются рекурсией, обращение к динамическому имени через конструкцию Код: xml 1.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 17:20 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
_Vasilisk_Все просто. Циклы организовываются рекурсией, обращение к динамическому имени через конструкцию [src xml] *[name() = ....] Спасибо! Попробую применить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 19:41 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
Проверил. Применил. Всё работает! Спасибо! Правда есть свои нюансы. Например, не понимает конкатенацию с '.', т.е. если в наименовании поля есть '.', то не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 14:51 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
или ещё: $idx - 1 1-ку нужно обязательно через пробел, если написать так $idx-1, то ругается. а вот $idx+1 нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 14:52 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
verterНапример, не понимает конкатенацию с '.', т.е. если в наименовании поля есть '.', то не работает.У меня все работает Код: xml 1. 2. 3. 4. 5.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: xml 1. 2. 3. 4. 5.
verter1-ку нужно обязательно через пробел, если написать так $idx-1, то ругается.Потому, что "-" - это валидный символ для идентификатора и идентификатор может его содержать. А "+" не может и потому происходит разрыв ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 15:08 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
_Vasilisk_, и ещё очень неприятная вещь: не работает форматирование ячейки Excel в цифровой формат x:num='', т.е. если написать так: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
то выдаст ошибку Invalid XSL ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 14:31 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
verterто выдаст ошибку Invalid XSLУ Вас, конечно же определено пространство имен с алиасом "x"? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 15:45 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
verterи ещё очень неприятная вещь: не работает форматирование ячейки Excel в цифровой формат x:num='', т.е. если написать так:Может Вы перестанете кидать все свои проблемы в одну тему? Неумение работать с пространствами имен никак не касается возможности вывода узлов с динамическим именем ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 15:47 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
_Vasilisk_, приношу свои извинения - действительно не определил пространство имён. в общем виде я делаю так: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Да, видно что я определяю пространство имён 'x' в главном шаблоне уже после объявления вызываемого шаблона "printData". Поэтому то и возникает ошибка. Но как мне тогда в "printData" определить это же пространство имён 'x'? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 16:42 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
разобрался. нужно в самом начале объявить это пространство имён, вот так: Код: html 1.
причём тут тоже нужно оставить: Код: html 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 18:41 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
_Vasilisk_verterНапример, не понимает конкатенацию с '.', т.е. если в наименовании поля есть '.', то не работает.У меня все работает Код: xml 1. 2. 3. 4. 5.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: xml 1. 2. 3. 4. 5.
а попробуйте будет ли у вас работать если вот так: Код: html 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 00:59 |
|
Как в xslt преобразовать заранее неизвестное кол-во колонок в таблице?
|
|||
---|---|---|---|
#18+
verterа попробуйте будет ли у вас работать если вот так: Код: xml 1.
Проверил. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Как и следовало ожидать - работает ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2018, 15:06 |
|
|
start [/forum/topic.php?fid=14&fpage=4&tid=1331994]: |
0ms |
get settings: |
19ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
51ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
251ms |
get tp. blocked users: |
2ms |
others: | 308ms |
total: | 646ms |
0 / 0 |