Может ли xsl: variable быть определена дважды с одним и тем же именем? - PullRequest
0 голосов
/ 23 марта 2012

Может ли переменная xsl: быть определена дважды с одним и тем же именем в одной и той же области.Для кода, подобного следующему:

<xsl:template match="\">
   <table>
   <tr><td>
     <xsl:variable name="status" select="normal"/>
   </td></tr>
   <tr><td>
     <xsl:variable name="status" select="failed"/>
   </td></tr>
   </table>
</xsl:template>

Возможно, это зависит от типа просмотра.Какой стандарт?

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

Во-первых, две переменные никогда не имеют одинаковую область видимости. Даже если они оба являются глобальными, область видимости переменной исключает собственное выражение выбора, поэтому область видимости двух переменных различна.

Во-вторых, в вашем примере область действия двух переменных даже не перекрывается. Каждая переменная ограничена своим собственным, содержащим td элемент.

Для двух глобальных переменных правило состоит в том, что вы можете иметь две переменные с одинаковым именем при условии, что они имеют различный приоритет импорта, и в этом случае все ссылки обрабатываются как ссылки на одну с более высоким приоритетом.

Если одна переменная является локальной, а другая - глобальной, локальная переменная выигрывает, если она находится в области видимости.

Если у вас есть две локальные переменные с перекрывающейся областью действия, это ошибка в XSLT 1.0, но разрешенная в XSLT 2.0; в области перекрытия выигрывает переменная с меньшей областью действия.

1 голос
/ 23 марта 2012

Ошибка, если две или более переменных верхнего уровня (вне любого шаблона) имеют одинаковые имена.

Аналогично, это ошибка, если две или более переменных в одном и том же шаблоне имеют одинаковые имена.

Но для переменной в шаблоне допустимо значение shadow для переменной с тем же именем на верхнем уровне.

Нет никакого противоречия между переменными, если только их области действия (части таблицы стилей, где переменные видны) не перекрываются. Область видимости переменной внутри шаблона включает в себя следующие элементы-братья и их потомки. Область действия переменной верхнего уровня находится везде в таблице стилей после этой переменной.

0 голосов
/ 25 мая 2012

Я нашел ключ.

MSXML 3.0 поддерживает только схемы XDR, не поддерживает схемы XSD. MSXML 4.0, MSXML 5.0 и MSXML 6.0 поддерживают схемы XSD.

...