Tworzenie atrybutów w dokumencie Xslt jest proste - albo używamy instrukcji xsl:attribute której atrybut name określa nazwę tworzonego atrybutu a ciało - zawartość, albo - co jest chyba jeszcze bardziej naturalne - w tworzonym elemencie wpisujemy atrybut tak jak ma on wygladac w dokumencie wyjściowym. W drugim przypadku możemy użyć nawiasów klamrowych żeby wstawić wartość ze źródłowego dokumentu (jest to tzw. AVT czyli Attribute Value Template). To właśnie te nawiasy klamrowe mogą sprawić troszkę kłopotu - chyba głównie dlatego, że tak naprawdę dość rzadko istnieje konieczność wstawienia nawiasu klamrowego W wartości atrybutu. Generalnie dwa główne przypadki to chyba JavaScript (np. atrybut onClick zawierający instrukcję warunkową) oraz WPF/XAML.
Załóżmy, że nasz Xslt ma za zadanie "wyprodukować" następujący element w dokumencie wynikowym:
<Button Name="btn2" IsEnabled="{Binding ElementName=btn1,
Converter={StaticResource BooleanToVisibility}}" />Po skopiowaniu powyższej linijki do arkusza Xslt procesor zgłosi błąd, którego źródłem są nawiasy klamrowe (procesor Xslt traktuje wyrażenie w nawiasach jako AVT). Chwila namysłu... i mamy "obejście" problemu:
<Button Name="btn2">
<xsl:attribute name="IsEnabled">{Binding ElementName=btn1,
Converter={StaticResource BooleanToVisibility}}</xsl:attribute>
</Button>
Nawet działa... Tylko nie jest za bardzo naturalne. Przede wszystkim znamy nazwę atrybutu - nie ma więc powodu żeby używać instrukcji xsl:attribute. Tym bardziej, że wartość atrybutu też jest znana. Na szczęście twórcy Xslt przewidzieli ten problem. Wystarczy znak '{' zastąpić sekwencją '{{' a znak '}' zastąpić sekwencją '}}' i wszystko działa jak należy. Ostatecznym rozwiązaniem jest więc:
<Button Name="btn2" IsEnabled="{{Binding ElementName=btn1,
Converter={{StaticResource BooleanToVisibility}}}}" />