|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Привет гениальным парням! ) есть такой XML - список товаров с вложенными вариантами товаров, у товара может быть несколько вариантов. И у материнского товара и дочернего(вариант, модификация) - есть поле таймера ------------------------------------------------- <item> <datetime> <item> <datetime> <item> <datetime>07.08.2014 10:11:59</datetime> <modifications> <item> <datetime>07.08.2014 10:14:29</datetime> <item> <datetime ....> <item> <datetime.....> </modifications> <item> <datetime> <item> <datetime> ---------------------------------------------------- возможно ли средствами XSL отсортировать все товары Item таким образом, чтобы: если попадается товар с вложенными модификациями, то в качестве ключа сортировки datetime материнского товара подставлялся datetime самого свежего вложенного товара (модификации)? я много чего перепробовал, уже чувствую тупик. Может быть есть идея? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 15:34 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
обалденный xml. угадай, где должен быть закрывающий тэг. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 16:17 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
даже если так Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
все равно бардак ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 16:20 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
оригинальный xml чрезмерно большой, там десятки полей и атрибутов, я взял основное, ну ведь очевидно же: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 16:59 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
2-х уровневое дерево - список items, но у некоторых item есть вложенный список modifications. 1-й уровень item/datetime 2-й уровень item/modifications/item/datetime Сейчас сортировка работает по item/datetime, Задача: Если <xsl:when test="count(modifications/item) > 0"> то вместо ключа item/datetime выдать что-то типа last(item/modifications/item/datetime) <xsl:otherwise> ключ сортировки тот-же - item/datetim поле datetime - это как пример, вместо него можно и по параметру ID, но построить такой принцип сортировки я не смог найти имеющимися средствами xPath и собственно XSL ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:11 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Нужно создать промежуточный xml Код: xml 1. 2. 3.
и отсортировать по item/@datetime ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:22 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Antonariy, это HostCMS, там нет возможности в кишках ковыряться, я могу разве что дополнительным параметром в динамической php-странице запросить дополнительные поля из базы, которые появятся в XML ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:25 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
в таблице товаров у каждой модификации есть заполненное поле с ID-материнского товара, я могу его добавить в XML, но я не представляю как это может помочь ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:29 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Промежуточный xml создается в самом xsl: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:32 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
ага, Спасибо за идею! нечто новое для меня, надо обмозговать, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2014, 17:41 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
А что, конструкция <xsl:for-each select="msxsl:node-set($tmp)"> </xsl:for-each> должна работать вместо <xsl:apply-templates select="item" > </xsl:apply-templates > ? а может быть такое что такая Функция может не поддерживаться процессором? у меня libxml2-2.9.1_1 XML parser library for GNOME libxslt-1.1.28_3 The XSLT C library for GNOME ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2014, 16:54 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
это не работает: Код: plaintext 1. 2. 3.
меня смущает msxlt, от него майкрософтом пахнет) , мож. быть несовместимость с процессором? попробовал вывести посмотреть на содержимое этой функции через value-of, тоже ничего не видно как только ставлю на место Код: plaintext 1. 2. 3. 4.
сразу все работает, что не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2014, 19:10 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Валерьянкаменя смущает msxlt, от него майкрософтом пахнет) , мож. быть несовместимость с процессором?В понедельник покажу код для всех процессоров ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2014, 19:21 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
_Vasilisk_ , обещал код показать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 18:06 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Валерьянка_Vasilisk_ , обещал код показать )Точно. Забыл. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Теперь при вызове Код: xml 1.
трансформер от Microsoft будет вызывать свою функцию, а всякие Xalan и Saxon будут вызывать пользовательскую функцию, которая внутри вызывает их родную common:node-set(). Если же совместимость с Microsoft не нужна, то достаточно просто в коде сразу дергать common:node-set() и свою функцию не определять ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 19:51 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
ааа, так для использования функций от microsoft просто нужно было сначала объявить о них в <xsl:stylesheet прописью xmlns:msxsl="urn:schemas-microsoft-com:xslt? это главная идея, да? и процессор будет их адекватно парсить? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 18:50 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Валерьянкаааа, так для использования функций от microsoft просто нужно было сначала объявить о них в <xsl:stylesheet прописью xmlns:msxsl="urn:schemas-microsoft-com:xslt? это главная идея, да? и процессор будет их адекватно парсить?я что-то сомневаюсь, но ведь попытка не пытка же? всего-то xmlns:msxsl дописать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 19:01 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Не идет внедрение новых технологий (( <xsl:template match="item"> <item> <xsl:attribute name="datetime"> <xsl:choose> <xsl:when test="count(modifications/item) > 0"> <xsl:value-of select="modifications/item[1]/datetime"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="datetime"/> </xsl:otherwise> </xsl:choose> </xsl:attribute> </item> <xsl:value-of select="@datetime"/> </xsl:template> атрибуту ничего не назначается, пусто, хотя <xsl:value-of select="datetime"/> выводятся ок, почему? Antonariy, в предложенном куске непонятен синтаксис <xsl:template match="item"> <item> </item> </xsl:template> при чем без этих <item></item> весь шаблон перестает работать ) объясни пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 19:59 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Переписал красиво) Не идет внедрение новых технологий (( Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
атрибуту ничего не назначается, пусто, хотя <xsl:value-of select="datetime"/> выводятся ок, почему? Antonariy, в предложенном куске непонятен синтаксис Код: xml 1. 2. 3. 4.
при чем без этих <item></item> весь шаблон перестает работать ) объясни пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 21:01 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
шаблон соответствует элементу item, для каждого из них создается новый <item></item>, в который записывается атрибут datetime и копируется содержимое исходного item. из этих новых <item></item> в переменной $tmp создается новый xml-документ. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 22:09 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Валерьянкаи процессор будет их адекватно парсить?Нет. Если процессор знает такую функцию - он ее вызовет, если нет - появится ошибка Валерьянкаатрибуту ничего не назначается, пусто, хотя <xsl:value-of select="datetime"/> выводятся ок, почему?А если переписать так Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
что получится? Кроме того смущает запись Код: xml 1.
у Вас в исходном XML есть атрибут datetime? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 22:15 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
_Vasilisk_Если процессор знает такую функцию - он ее вызовет, если нет - появится ошибка вообще никаких ошибок не выдает, просто не выводит ничего, мож быть поднастроить модуль XSLT для вывода ошибок? Кроме того смущает запись Код: xml 1.
_Vasilisk_ у Вас в исходном XML есть атрибут datetime? нет, в исходном XML такого атрибута нет, я пытался вывести вновь созданный атрибут для проверки, не так разве? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 17:56 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
_Vasilisk_А если переписать так что получится? _Vasilisk_, я смотрю в коде появились два номера 1 и 2, что это? в документации не встречал ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 18:01 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
Antonariyшаблон соответствует элементу item, для каждого из них создается новый <item></item>, в который записывается атрибут datetime и копируется содержимое исходного item. из этих новых <item></item> в переменной $tmp создается новый xml-документ. а исходный шаблон item содержит в себе (после модернизации) копию самого себя, который содержит копию самого себя с копией самого себя и так далее..похоже на бесконечный цикл......как это правильно представить? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 18:26 |
|
Сортировка по элементам из двух уровней
|
|||
---|---|---|---|
#18+
в голове на всякий случай прописал всё: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
вместо Код: xml 1.
прописал Код: xml 1. 2. 3. 4. 5. 6.
в описании шаблона прописал Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
не работает вообще, пустое место.., возвращаю назад Код: xml 1.
страница работает в исходном виде. как проверить содержимое добавленного атрибута? если просто выводом Код: xml 1.
нельзя? а как можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 18:53 |
|
|
start [/forum/topic.php?fid=14&msg=38723835&tid=1332321]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 231ms |
total: | 363ms |
0 / 0 |