powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в XPath заменить жесткое название поля на название из переменной
12 сообщений из 12, страница 1 из 1
Как в XPath заменить жесткое название поля на название из переменной
    #36892691
dmnazarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь за ламерский вопрос, но деваться некуда...

есть такое xslt выражение
<xsl:when test="count($currnode/following-sibling::Row[@MyGroup1=$grpFieldValue]) > 0)"
... и т.д.

оно работает,
но мне необходимо вместо жесткого указания имени поля вставить значение параметра xslt-темплэйта что бы использовать разные поля.
что-то типа
<xsl:when test="count($currnode/following-sibling::Row[@$GroupFieldName=$grpFieldValue]) > 0)"

вариант
<xsl:when test="count($currnode/following-sibling::Row[@*[name() = $GroupFieldName]=$grpFieldValue]) > 0)"
не проходит, а знаний, что не так не хватает
помогите плиз...
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892740
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmnazarov,

оно?
Код: plaintext
<xsl:when test="count($currnode/following-sibling::Row[@*[name()=$GroupFieldName]=$grpFieldValue]) > 0)"> ...
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892743
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... недочитал.
почему не проходит?
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892758
dmnazarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выдает толька первый элемент из возможных
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892814
dmnazarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за неполный ответ,
вот сам шаблон, он считает сумму по группам в xml-таблице
если использовать переменную, то сумма равна значению поля в первом элементе
если использовать имя поля то всё как надо

<xsl:template name="sumByGroup1">
<xsl:param name="currnode"/>
<xsl:param name="grpfieldname"/>
<xsl:param name="grpfieldvalue"/>
<xsl:param name="resfieldname"/>
<xsl:param name="res"/>

<xsl:variable name="curvalue" select="translate($currnode/@*[name() = $resfieldname],',','.')"/>

<xsl:variable name="curnumber">
<xsl:choose>
<xsl:when test="$curvalue!=''">
<xsl:value-of select="$curvalue"/>
</xsl:when>
<xsl:otherwise>
0
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

<xsl:choose>
<!--<xsl:when test="count($currnode/following-sibling::Row[@Group=$fieldvalue])>0"> -->
<!-- <xsl:when test="count($currnode/following-sibling::Row[@Group=$grpfieldvalue])>0"> -->
<xsl:when test="count($currnode/following-sibling::Row[@*[name() = $grpfieldname] = $grpfieldvalue])>0">
<xsl:call-template name="sumByGroup1">
<xsl:with-param name="currnode" select="$currnode/following-sibling::Row[1]"/>
<xsl:with-param name="grpfieldname" select="$grpfieldname"/>
<xsl:with-param name="grpfieldvalue" select="$grpfieldvalue"/>
<xsl:with-param name="resfieldname" select="$resfieldname"/>
<xsl:with-param name="res" select="$res + number($curnumber)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number($res+number($curnumber), "#я##0,00'а.';-#я##0,00'а.'", "lcid1049")"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


--------- Вызов делатеся так ---------
<td class="ms-gb">
<b >Сумма  =
<xsl:call-template name="sumByGroup1">
<xsl:with-param name="currnode" select="$nodeset"/>
<xsl:with-param name="grpfieldname" select="Group"/>
<xsl:with-param name="grpfieldvalue" select="$fieldvalue"/>
<xsl:with-param name="resfieldname" select="'Income'"/>
<xsl:with-param name="res" select="0"/>
</xsl:call-template>
</b>
</td>
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892875
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmnazarov,

XML тоже выкладывай
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36892899
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так надо писать:
Код: plaintext
count($currnode/following-sibling::Row/@*[name() = $grpfieldname] = $grpfieldvalue)> 0 
или так:
Код: plaintext
count($currnode/following-sibling::Row[@*[name() = $grpfieldname and . = $grpfieldvalue])> 0 
короче, пробывать надо на чем-то.
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36893049
dmnazarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сами данные берутся из MSSQL-я через MS Sharepoint списки.
В принципе можно было бы подготовить тестовые, но выдрать полезный XSLT код из aspx формы я уже не осилю. Уж такая там портянка.

этот вариант
авторcount($currnode/following-sibling::Row/@*[name() = $grpfieldname] = $grpfieldvalue)>0
не скомпилировался, т.к. возвращается не множество.... и не может быть параметром COUNT

этот
авторcount($currnode/following-sibling::Row[@*[name() = $grpfieldname and . = $grpfieldvalue])>0
аналогичен первому предложенному варианту
автор<xsl:when test="count($currnode/following-sibling::Row[@*[name()=$GroupFieldName]=$grpFieldValue]) > 0)">
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36893055
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmnazarov,

xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<root>
	<row q="w1" income="1"/>
	<row q="w" income="20"/>
	<row q="w1" income="300"/>
	<row q="w" income="4000"/>
	<row q="w1" income="50000"/>
	<row q="w" income="600000"/>
	<row q="w1" income="7000000"/>
	<row q="w" income="80000000"/>
	<row q="w1" income="900000000"/>
</root>

xsl
Код: plaintext
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.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="text"/>
	<xsl:template match="/">
		<xsl:call-template name="sumByGroup1">
			<xsl:with-param name="currnode" select="root/row[2]"/>
			<xsl:with-param name="grpfieldname" select="'q'"/>
			<xsl:with-param name="grpfieldvalue" select="'w'"/>
			<xsl:with-param name="resfieldname" select="'income'"/>
			<xsl:with-param name="res" select="0"/>
		</xsl:call-template>
		<xsl:text>-</xsl:text>
		<xsl:call-template name="sumByGroup1">
			<xsl:with-param name="currnode" select="root/row[1]"/>
			<xsl:with-param name="grpfieldname" select="'q'"/>
			<xsl:with-param name="grpfieldvalue" select="'w1'"/>
			<xsl:with-param name="resfieldname" select="'income'"/>
			<xsl:with-param name="res" select="0"/>
		</xsl:call-template>
	</xsl:template>
	<xsl:template name="sumByGroup1">
		<xsl:param name="currnode"/>
		<xsl:param name="grpfieldname"/>
		<xsl:param name="grpfieldvalue"/>
		<xsl:param name="resfieldname"/>
		<xsl:param name="res"/>
		<xsl:variable name="curvalue" select="translate($currnode/@*[name() = $resfieldname],',','.')"/>
		<xsl:variable name="curnumber">
			<xsl:choose>
				<xsl:when test="$curvalue!=''">
					<xsl:value-of select="$curvalue"/>
				</xsl:when>
				<xsl:otherwise> 0 </xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<xsl:choose>
			<!--<xsl:when test="count($currnode/following-sibling::Row[@Group=$fieldvalue])>0"> -->
			<!-- <xsl:when test="count($currnode/following-sibling::Row[@Group=$grpfieldvalue])>0"> -->
			<xsl:when test="count($currnode/following-sibling::row[@*[name() = $grpfieldname] = $grpfieldvalue])>0">
				<xsl:call-template name="sumByGroup1">
					<xsl:with-param name="currnode" select="$currnode/following-sibling::row[@*[name() = $grpfieldname] = $grpfieldvalue][1]"/>
					<xsl:with-param name="grpfieldname" select="$grpfieldname"/>
					<xsl:with-param name="grpfieldvalue" select="$grpfieldvalue"/>
					<xsl:with-param name="resfieldname" select="$resfieldname"/>
					<xsl:with-param name="res" select="$res + number($curnumber)"/>
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$res+number($curnumber)"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>

text
Код: plaintext
 80604020 - 907050301 
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36893058
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема скорее всего в вызове шаблона - обрати внимание - я вызываю из корня один элемент. Сначала вызывал множество - выходил только первый элемент.
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36893114
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,

ну вот, не дал помучить человека.
там изначально было понятно, что проблема не в этом xPath. хорошо, что у тебя есть время генерить XML.
...
Рейтинг: 0 / 0
Как в XPath заменить жесткое название поля на название из переменной
    #36893143
dmnazarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, пока перевариваю Ваше решение.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в XPath заменить жесткое название поля на название из переменной
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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