Рассмотрим простой пример элемента xml:
<parent foo="1" bar="2" foobar="3">
<child/>
</parent>
В xsl-файле я нахожусь в контексте "parent" (то есть внутри ). Я хочу выбрать набор узлов (в примере только один атрибут) на основе строковой переменной. Например, я хочу выбрать набор узлов, который соответствует $ attribute-name. Я покажу мой неудачный пример xsl, и вы, вероятно, поймете, что я пытаюсь сделать.
<xsl:template match="parent">
<xsl:call-template name="print-value-of">
<xsl:with-param name="attribute-type" select="'foo'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="print-value-of">
<xsl:param name="attribute-type"/>
<xsl:value-of select="$attribute-type"/>
</xsl:template>
Это печатает вывод:
foo
То, что я сначала НАМЕРЕН, чтобы сделать (но я понимаю, что это не то, что он должен делать):
- оценить переменную атрибут - тип ( или param, если вы хотите быть разборчивым) как строка 'foo'
- вызвать значение-как если бы я вызвал
т.е. то, что я хотел напечатать, было:
1
ВОПРОС : Как мне добиться такого поведения?
Обратите внимание : Мне известно о том, что в этом простом случае я мог бы передать фактический узел атрибута в качестве параметра (т. Е. ). Но это не решение, которое я ищу. Мне нужно передать только информацию о типе атрибута (или имени атрибута, если вы хотите так его называть)
На самом деле я пытаюсь создать общий шаблон функции, который может:
- Вызов функции (шаблон вызова) с типом атрибута в качестве параметра
- В этой функции выполняется множество операций, которые дают мне набор узлов, сохраняемый в переменной
- сумма всех атрибутов элементов в наборе узлов, которые имеют ранее выбранный тип атрибута
Я могу использовать только XSLT 1.0, поэтому решения 1.0 гораздо предпочтительнее!
Последующий вопрос на похожую тему: Можно ли также создать атрибуты с именем / типом, указанным в строковой переменной? * 1061 Т.е. *
<xsl:attribute name="$attribute-type"/>
Выполнение этого, как показано выше, приводит к тому, что $ attribute-type является буквальным именем атрибута в выводе xml. Вместо этого я хотел бы, чтобы он снова вычислял переменную и давал оцененное значение в качестве имени.
</ EDIT2>