C# skripty v XSLT šabloně
V tomto článku se podíváme na zoubek zajímavému způsobu, jak vykonat kód v jazycích C# nebo VB.NET v XSLT šabloně. Tuto techniku hodně programátorů opomíjí, což je podle mého názoru velká škoda, protože zvládnutí tohoto způsobu transformací otevírá novou cestu po stezce XSL transformací.
Třída XslTransform
umožňuje vložit kód v jazyce C#, VB.NET nebo JScript do samotné šablony stylů. Ve chvíli, kdy je šablona načtena, všechny funkce jsou zkompilovány obdobným způsobem jako kód na stránce ASP.NET do jazyka Microsoft Intermediate Language (MSIL). To řečeno „lidsky“ znamená, že uložení funkcí přímo do šablony nemá žádný negativní dopad na výkon aplikace!
Kód se nachází uvnitř elementu <msxsl:script>
, který má dva atributy – „language“ a „implements-prefix“. Uvnitř atributu „language“ se může vyskytnout jeden z následujících řetězců: C#
, VB
, JScript
, JavaScript
, VisualBasic
nebo CSharp
. Pokud ponecháme atribut „language“ prázdný, bude se předpokládat použití jazyka JScript. Atribut „implements-prefix“ stanovuje jmenný prostor spojený s naším blokem kódu. Tento prefix musíme však také definovat v šabloně stejně, jako každý jiný jmenný prostor.
Z teoretického pohledu toto, myslím, plně dostačuje, podívejme se na jednoduchý příklad. Nejdříve musíme mít nějaká XML data:
<?xml version=“1.0″ ?>
<UserList>
<User ID=“00001″>
<Nick>dmx</Nick>
<DateOfBirth>9.4.1984</DateOfBirth>
</User>
<User ID=“00002″>
<Nick>billG</Nick>
<DateOfBirth>20.10.1980</DateOfBirth>
</User>
</UserList>
Poté vytvoříme šablonu stylů, do které vložíme nějaký kód:
<xsl:stylesheet version=“1.0″ xmlns:xsl=“http://www.w3.org/1999/XSL/Transform“
xmlns:msxsl=“urn:schemas-microsoft-com:xslt“
xmlns:dmx=“urn:my-scripts“>
<msxsl:script language=“C#“ implements-prefix=“dmx“>
<![CDATA[
public int GetAge(string date)
{
int age = 0;
System.DateTime dateOfBirth = System.DateTime.Parse(date);
System.TimeSpan ts = System.DateTime.Now – dateOfBirth;
age = (int)(ts.TotalDays / 365.25);
return age;
}
]]>
</msxsl:script>
<xsl:template match=“/“>
<p>
<xsl:for-each select=“UserList/User“>
<xsl:value-of select=“@ID“ /> == <xsl:value-of select=“Nick“ />:
<xsl:value-of select=“dmx:GetAge(DateOfBirth)“/> let
<br />
</xsl:for-each>
</p>
</xsl:template>
</xsl:stylesheet>
Na začátku definujeme použité jmenné prostory. Nejprve „msxsl“ (použitý u prvku script
) a potom prefix použitý pro kód. Následuje náš blok kódu. Specifikovali jsme oba dva parametry, jako jazyk budeme používat C#. Doporučuje se, aby samotný kód byl vložen do sekce CDATA
. Pokud tak neučiníte, vystavujete se nebezpečí nečekaných pádů a výjimek.
V ukázce definujeme pouze jednu funkci GetAge(string)
. Ta nedělá nic jiného, než že převádí řetězcovou reprezentaci data na System.DateTime
a následně vypočítá, kolik let uběhlo od daného okamžiku (v tomto případě narození jisté osoby).
Za kódem následuje samotná šablona, ve které nás bude zajímat snad jen řádek <xsl:value-of select="dmx:GetAge(DateOfBirth)"/>
. Tady právě voláme metodu GetAge
a jako parametr jí předáváme hodnotu uzlu DateOfBirth
. Všimněte si prefixu „dmx“ před GetAge
. Zbytek šablony ponechám bez výkladu, není tam nic zajímavého.
Aby to všechno mělo nějaký efekt, musíme vytvořit nějaký ASP.NET formulář. Mohl by to vypadat třeba takhle:
<%
XPathDocument dokument = new XPathDocument(Server.MapPath(„Users.xml“));
XslTransform xsl = new XslTransform();
xsl.Load(Server.MapPath(„Users.xslt“));
xsl.Transform(dokument, null, Response.OutputStream);
%>
Výsledkem nám bude jakýsi seznam přezdívek a jejich aktuálního věku. Možností, jak využít tuto techniku je opravdu hodně, záleží hlavně na vaší fantazii. Začít můžete třeba úpravami výše uvedeného příkladu, který je vám k dispozici v ZIP archivu.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024