Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Подскажите как правильно / 25 сообщений из 31, страница 1 из 2
19.05.2012, 14:56
    #37802113
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
Прошу прощения за чайниковский вопрос - но приходится работать Фросей-семиделкой:)

Есть xml:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8" ?>
<NewDataSet>
	<Table>
	...
	</Table>
</NewDataSet>



и есть таблица преобразования в которой есть 2 шаблона, которые необходимо выполнить
делаю так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="NewDataSet">
    <Parts>
      <xsl:apply-templates select="Table" />
    </Parts>
  </xsl:template>

  <xsl:template match="Table" name="Part1">...</xsl:template>
  <xsl:template match="Table" name="Part2">...</xsl:template>
</xsl:stylesheet>



Но вызывается только первый шаблон
Как мне вызвать на выполнение все шаблоны (их может быть от К до N штук)
...
Рейтинг: 0 / 0
19.05.2012, 15:39
    #37802148
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
изменение на

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="NewDataSet">
    <Parts>
      <xsl:call-template name="Part1" />
      <xsl:call-template name="Part2" />
    </Parts>
  </xsl:template>

  <xsl:template match="Table" name="Part1">...</xsl:template>
  <xsl:template match="Table" name="Part2">...</xsl:template>
</xsl:stylesheet>



приводит к выдаче пустых шаблонов (данные не попадают в шаблоны...)
...
Рейтинг: 0 / 0
19.05.2012, 15:51
    #37802152
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
Решил

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="NewDataSet/Table">
    <Parts>
      <xsl:call-template name="Part1" />
      <xsl:call-template name="Part2" />
    </Parts>
  </xsl:template>

  <xsl:template name="Part1">...</xsl:template>
  <xsl:template name="Part2">...</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
19.05.2012, 15:52
    #37802153
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
Но хотелось бы решить и при помощи ...

Код: xml
1.
<xsl:apply-templates select="Table" />
...
Рейтинг: 0 / 0
19.05.2012, 23:46
    #37802437
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
Замените name на mode
...
Рейтинг: 0 / 0
19.05.2012, 23:58
    #37802446
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_Замените name на mode
заменил - не помогло (
...
Рейтинг: 0 / 0
20.05.2012, 00:08
    #37802453
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spзаменил - не помогло (Не верю. Код в студию
...
Рейтинг: 0 / 0
20.05.2012, 00:12
    #37802456
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_spзаменил - не помогло (Не верю. Код в студию

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="/">
    <Parts>
      <xsl:apply-templates select="NewDataSet" />
    </Parts>
  </xsl:template>

  <xsl:template match="Table" mode="Part1">...</xsl:template>
  <xsl:template match="Table" mode="Part2">...</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
20.05.2012, 00:19
    #37802461
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
sp, А где
sp
Код: xml
1.
 <xsl:apply-templates select="Table" />

?
...
Рейтинг: 0 / 0
20.05.2012, 00:21
    #37802462
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_sp, А где
sp
Код: xml
1.
 <xsl:apply-templates select="Table" />

?

и так не катит..
...
Рейтинг: 0 / 0
20.05.2012, 00:31
    #37802468
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_,

уже лучше бы код подправили - оно быстрее было бы :)
...
Рейтинг: 0 / 0
20.05.2012, 00:51
    #37802480
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spуже лучше бы код подправили - оно быстрее было бы :)Влом :)

Возьмите Ваш второй вариант и замените все name на mode
...
Рейтинг: 0 / 0
20.05.2012, 00:54
    #37802483
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_spуже лучше бы код подправили - оно быстрее было бы :)Влом :)
Возьмите Ваш второй вариант и замените все name на mode

дык мне нужен первый а не второй вариант :)
сколько еще будем так переписываться без дела??? уже б как в том анекдоте "ты мне пальцем покажи, а то do you speak english?" :)
...
Рейтинг: 0 / 0
20.05.2012, 01:36
    #37802505
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spсколько еще будем так переписываться без дела???Неужели так сложно прочесть документацию по атрибуту mode?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="NewDataSet">
    <Parts>
      <xsl:apply-templates select="Table" mode="Part1"/>
      <xsl:apply-templates select="Table" mode="Part2"/>
    </Parts>
  </xsl:template>

  <xsl:template match="Table" mode="Part1">...</xsl:template>
  <xsl:template match="Table" mode="Part2">...</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
20.05.2012, 01:38
    #37802508
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_,

не понял, а что это вы мне привели?
у меня без mode с name такой вариант работает!! тынц

я ж хотел избавиться от двойного объявления и вызова шаблонов, а вы мне 2й вариант моего второго варианта привели! :) и зачем?
...
Рейтинг: 0 / 0
20.05.2012, 02:06
    #37802520
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spне понял, а что это вы мне привели?То, что Вы просили - заменил <xsl:call-template> на <xsl:apply-templates>
spвы мне 2й вариант моего второго варианта привели!Если Вы не понимаете отличия между <xsl:apply-templates> и <xsl:call-template>, то мне больше добавить нечего
...
Рейтинг: 0 / 0
20.05.2012, 02:23
    #37802525
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_,

вопрос не в том насколько я не понимаю - вопрос в том чтобы мне помогли а не в очередной раз макнули Ж) сам знаю что плаваю, но некогда изучать - тут гонят давай-давай :)
...
Рейтинг: 0 / 0
20.05.2012, 02:34
    #37802528
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spвопрос в том чтобы мне помогли а не в очередной раз макнули Ж)Так Вы объясните, что же именно Вам нужно?
spно некогда изучать - тут гонят давай-давай :)А деньги зарабатывать есть когда?
...
Рейтинг: 0 / 0
20.05.2012, 02:40
    #37802529
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_,

Разве это деньги?? ))) такое даже деньгами не называют - это пособие какое-то :)
Мне нужно один узел обработать (в данном случае Table) N-м количеством шаблонов. Шаблоны будут просто добавляться в текст в коде, поэтому желательно избежать лишних телодвижений в виде индивидуальных вызовов этих шаблонов то ли по name то ли по mode.
...
Рейтинг: 0 / 0
20.05.2012, 03:26
    #37802536
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spпоэтому желательно избежать лишних телодвижений в виде индивидуальных вызовов этих шаблонов то ли по name то ли по mode.Это невозможно. Единственный способ - это описать общий шаблон, который будет вызывать нужную группу. И в необходимых местах вызывать уже общий шаблон
...
Рейтинг: 0 / 0
21.05.2012, 11:08
    #37803449
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
spприводит к выдаче пустых шаблонов (данные не попадают в шаблоны...)
То, что вам предложил _Vasilisk_ c модами и есть то что, вы простили.
Да еще, никогда не используйте call-template если можно решить задачу без нее.
...
Рейтинг: 0 / 0
21.05.2012, 11:15
    #37803466
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
sp... Шаблоны будут просто добавляться в текст в коде, поэтому желательно избежать лишних телодвижений в виде индивидуальных вызовов этих шаблонов то ли по name то ли по mode.
А вот с этого места поподробнее, т.к. в стартовой задаче ничего про это нет.
например, можно разбирать по атрибуту, т.е. каждый шаблон должен разбирать свои данные или как?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8" ?>
<NewDataSet>
	<Table>
             <this type="1" />
	...
	</Table>
	<Table>
             <this type="7" />
	...
	</Table>
</NewDataSet>


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" encoding="utf-8" indent="no" />
  <xsl:template match="/">
    <Parts>
      <xsl:apply-templates select="/NewDataSet/Table" />
    </Parts>
  </xsl:template>

  <xsl:template match="Table[this/@type=1]">...</xsl:template>
  <xsl:template match="Table[this/@type=7]">...</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
21.05.2012, 11:52
    #37803548
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
mage.lanникогда не используйте call-template если можно решить задачу без нее.Почему?
...
Рейтинг: 0 / 0
21.05.2012, 12:31
    #37803629
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
_Vasilisk_,

Если скажу "из практики" поверите?

call-template появляется в коде в следующих случаях:
1. кривые руки XSL разработчика, который еще не отучился от какого-либо императивного языка и хочет все вызывать, при этом не понимает как оно работает. Приводит к плачевным последствиям и очень тормозным, а зачастую и не правильно работающим шаблонам.
2. кривые руки серверного программиста, который прислал плохо продуманный словарь XML, для того, чтобы его обработать приходится использовать рекурсивные цепочки. Однозначно тормозит шаблон, но порой является единственным выходом из ситуации, т.к. XML менять нельзя, так сказал заказчик.
3. кривые руки Дизайнера, который наплодил сто-пицот одинаковых элементов. В данном случае call-template оправдан, не тормозит, но ни к чему хорошему в общем не приводит.
4. не кривые руки XSL разработчика + большое количество разнообразных шаблонов + голова которая перевешивает пятую точку. Выделение кусков кода для удобства поддержки и рефакторинга. В этом случае оправдано, но это относится к "невозможности решить задачу без...".
...
Рейтинг: 0 / 0
21.05.2012, 12:37
    #37803634
sp
sp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как правильно
mage.lanА вот с этого места поподробнее, т.к. в стартовой задаче ничего про это нет.
например, можно разбирать по атрибуту, т.е. каждый шаблон должен разбирать свои данные или как?


Во входящем xml у меня один узел данных - Table
Мне в результате нужно получить все результаты его обработки различными шаблонами в одном узле Parts
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Подскажите как правильно / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]