Этот вопрос относится к XSL 1.0; в частности, потому, что затенение локальных переменных недопустимо.xsl: переменная область в xsl: for-each
Учитывая, что XSL переменные лексической области видимости, я не понимаю, почему этот пример, взятый из книги Майкла Кея (с 338 в 2/е и р 509 в 4/е..) Работы:
XML :
<program>
<opera>
<title>The Magic Flute</title>
<composer>Mozart</composer>
<date>1791</date>
</opera>
<opera>
<title>Ernani</title>
<composer>Verdi</composer>
<date>1843</date>
</opera>
...
<composer name="Mozart">
<fullname>Wolfgang Amadeus Mozart</fullname>
<born>1756</born>
<died>1791</died>
</composer>
...
</program>
XSL:
...
<xsl:for-each select="program/composer">
<h2><xsl:value-of select="fullname"/></h2>
<xsl:variable name="c" select="."/>
<xsl:for-each select="program/opera[composer=$c/@name]">
<p><xsl:value-of select="title"/></p>
</xsl:for-each>
</xsl:for-each>
...
Почему бы это быть случаем декларирования переменных с несколько раз в одной и тот же лексическом контексте? Я, очевидно, что-то пропустил; скорее всего, что xsl: for-each создает несколько виртуальных лексических контекстов? Тем не менее, это начинает больше напоминать динамическое масштабирование. Я не должен думать об этом правильно.
«* почему этот пример ... работает: *« На самом деле, это не так. –
@ michael.hor257k Можете ли вы пояснить, что вы имеете в виду? Как этот пример не работает? – pgoetz
** 1. ** У вас есть два способа написания 'xsl: value-of', и ни один из них не является правильным - ** 2. **'' ничего не выбирает из контекста 'composer'. –