Transformace XSL ASP.NET ve stručnosti
Přestože ASP.NET a .NET obecně umožňují provádět s XML a XSLT širokou škálu operací, přetransformovat dokument pomocí základní šablony je velmi jednoduché. V tomto článku si ukážeme elementární postup při provádění této operace a abychom se nenudili, trochu si ho okořeníme použitím XSLT Style Sheet parametrů.
Nejdříve musíme mít nějaký zdroj dat ve formátu XML. Použijeme třeba tento jednoduchý soubor:
<?xml version=“1.0″ encoding=“iso-8859-2″ ?>
<UserList>
<User ID=“00001″>
<FullName>Radek Jicha</FullName>
<Nick>rj</Nick>
<Email> radek_jicha@hotmail.com </Email>
</User>
<User ID=“00002″>
<FullName>Bill Gates</FullName>
<Nick>billg</Nick>
<Email>bill_gates@hotmail.com</Email>
</User>
<User ID=“00003″>
<FullName>Dino Esposito</FullName>
<Nick>dino</Nick>
<Email>dino@hotmail.com</Email>
</User>
</UserList>
Zde není moc co vysvětlovat, proto jdeme k XSL šabloně. Tak trochu předpokládám, že XSL všichni ovládáte, proto hlubší osvětlení opomenu. (Pokud se mýlím, můžete vše napravit díky seriálu Kompletní průvodce XSLT.) Koneckonců, naše vzorová šablona není složitá:
<?xml version=“1.0″ encoding=“iso-8859-2″ ?>
<xsl:stylesheet version=“1.0″ xmlns:xsl=“http://www.w3.org/1999/XSL/Transform“>
<xsl:param name=“sortby“ />
<xsl:template match=“/“>
<table border=“1″ cellpadding=“2px“ cellspacing=“0″ style=“border: 1px solid gray“>
<tr>
<td colspan=“4″>List of users</td>
</tr>
<tr >
<td>ID</td>
<td>Nick</td>
<td>Jmeno</td>
<td>Email</td>
</tr>
<xsl:for-each select=“UserList/User“>
<xsl:sort select=“./*[local-name() = $sortby]“ />
<tr>
<td><xsl:value-of select=“@ID“/></td>
<td><xsl:value-of select=“Nick“ /></td>
<td><xsl:value-of select=“FullName“ /></td>
<td><xsl:value-of select=“Email“ /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Jak už jsem řekl, vysvětlovat XSL zde nebudu, jen se pozastavím u jednoho výrazu. Podívejte se na <xsl:sort select="./*[local-name() = $sortby]" />
. Výraz v atributu „select“ musí být vyhodnocen pro každý uzel vrácený cyklem <xsl:for-each>
, abychom získali pozici daného uzlu v posloupnosti (podle hodnoty vrácené výrazem). Kdybychom použili pouze <xsl:sort select="$sortby" />
, což je stejná hodnota pro každý procházený uzel, nebyl by seznam seřazený.
Už máme data a šablonu, nyní se můžeme podívat na kód, který to na serveru dá všechno dohromady a vypustí do světa HTML:
<%@ Page Language=“C#“ Debug=“true“ %>
<%@ import Namespace=“System.IO“ %>
<%@ import Namespace=“System.Xml.XPath“ %>
<%@ import Namespace=“System.Xml.Xsl“ %>
<script runat=“server“>
protected string SortBy = „“;
void HandleSorting(Object sender, CommandEventArgs e)
{
if (e.CommandName == „SortBy“)
{
SortBy = e.CommandArgument.ToString();
}
}
</script>
<html>
<head>
<title>XML a XSLT</title>
</head>
<body style=“FONT-SIZE: 11px; FONT-FAMILY: Tahoma“>
<form runat=“server“>
Seřadit podle:
<asp:LinkButton id=“SortByID“ runat=“server“ OnCommand=“HandleSorting“ CommandArgument=“ID“ CommandName=“SortBy“>ID</asp:LinkButton>
::
<asp:LinkButton id=“SortByName“ runat=“server“ OnCommand=“HandleSorting“ CommandArgument=“FullName“ CommandName=“SortBy“>jména</asp:LinkButton>
::
<asp:LinkButton id=“SortByNick“ runat=“server“ OnCommand=“HandleSorting“ CommandArgument=“Nick“ CommandName=“SortBy“>nicku</asp:LinkButton>
<hr noshade=“noshade“ size=“1″ />
<%
XPathDocument dokument = new XPathDocument(Server.MapPath(„Users.xml“));
XslTransform xsl = new XslTransform();
xsl.Load(Server.MapPath(„Users.xslt“));
XsltArgumentList arglist = new XsltArgumentList();
arglist.AddParam(„sortby“, „“, SortBy);
xsl.Transform(dokument, arglist, Response.OutputStream);
%>
</form>
</body>
</html>
Nejdříve musíme importovat příslušné jmenné prostory (System.IO, System.Xml.XPath
a System.Xml.Xsl
). V našem formuláři máme tři ovládací prvky typu < asp:LinkButton />
, které se liší pouze v id (pochopitelně) a ve vlastnosti „CommandArgument“. Po klepnutí na tlačítko se zavolá metoda HandleSorting()
, která do proměnné „string SortBy“ (defaultně prázdné) uloží název sloupce, podle kterého se má seznam seřadit.
A nakonec nám zbyl samotný kód, který transformaci provádí. První, co musíme udělat, je načíst soubor XML do objektu typu XPathDocument
. Dále načteme šablonu do objektu XslTransform
a vytvoříme objekt reprezentující argumenty pro naši šablonu (XsltArgumentList
). V té máme pouze jeden argument „sortby“, metoda XsltArgumentList.Load()
však očekává parametry tři. První je název (tak jak jsme ho definovali v šabloně), druhým je jmenný prostor (jelikož jsme jmenné prostory nepoužili, ponecháme prázdné) a nakonec je samotný parametr. Právě tam uložíme hodnotu proměnné „SortBy“, která se bude měnit podle toho, na které tlačítko uživatel klepne. K provedení transformace už stačí jen zavolat přetíženou metodu XslTransform.Transform()
, které (v tomto příkladě) předáme náš XPathDocument
, seznam argumentů a určíme výstup.
Jak vidno, použití XSLT v ASP.NET je skutečně jednoduché a přitom velmi slibné. Vyzkoušejte si ukázku (zdrojový kód).
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
-
Rychlost serveru: Klíč k lepšímu umístění ve vyhledávačích
7. června 2024 -
4 tipy, jak na efektivní úsporu při rozjezdu podnikání
3. ledna 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024