XSL transformace XML v ASP.NET

1. dubna 2003

V článku „MS XMLDOM a integrace XML do ASP“ jste viděli, jak pokročile pracovat s XML soubory v ASP. V dnešním příkladu uvidíme, jak jednoduše můžeme zpracovat XML soubor v ASP.NET podobně jako v klasickém ASP za použití metody transformNode. Právě ze zmíněného článku jsem použil i ukázkové XML a XSLT soubory.

Způsobů práce s XML dokumentem v ASP.NET je několik – nejjednodušší je využít vestavěný web control pro práci parsování a transformace. Jde o Xml Web Server Control, díky kterému lze zobrazení anebo i překlad pomocí XSLT šablony provést na jediném řádku.

Použijeme-li zmíněný webový ovládací prvek, pak naše stránka může vypadat takto jednoduše (z důvodu přehlednosti je HTML kód očesán na minimum):

<%@ Page Language=“C#“ %>
<html>
<head><title>Transfomace XML</title></head>
<body>
<asp:xml DocumentSource=“Documents/Cd.xml“ TransformSource=“Documents/Tabulka.xslt“ runat=“server“ />
</body>
</html>

Porovnáním s článkem zmíněným v úvodu jistě uznáte, že toto je prostě hračka. Nadšení možná trochu opadne, když si představíme, co se stane v případě, kdy bude některý ze souborů chybět nebo v něm bude chyba. Pokud navíc XML soubor obsahuje definici DTD nebo schéma, ověřuje se, zda je soubor validní. Prohlédněte si ukázku. (Soubory ukázky si můžete stáhnout.)

Ačkoli můžeme nechat aplikaci tak jak je a ošetřit jen výjimky, které bude dozajista při chybách generovat, profesionálnější je chybám předcházet. Rozšíříme tedy naši aplikaci o možnost zadávání jména XML souboru pomocí QueryStringu (přes parametr v URL) a doplníme ověření, zda soubor existuje.

<%@ Page Language=“C#“ %>
<%@ Import Namespace=“System.IO“ %>
<script language=“C#“ runat=“server“>
void Page_Load(object sender, System.EventArgs e)
{ // provést v okamžiku zavádění stránky
  try  // pokusit se o:
  {
    if (Request.QueryString[„Document“]==null)
    {
      LblError.Text=“Nebyl zadán dokument!“; // nebyl zadán parametr Document, nastavit text chybového hlášení
    }
    else
    { // ověřit, zda existuje zadaný dokument na serveru
      string sPath=“Documents/“ + Request.QueryString[„Document“].ToString() + „.xml“;
      FileInfo fi = new FileInfo(Server.MapPath(sPath)); // rozšířit název souboru o kompletní cestu na serveru
      if (fi.Exists) // ověřit, zda soubor existuje
      {
        XmlParser1.DocumentSource=sPath; // nastavit DocumentSource pro XML control
      }
      else // soubor neexistuje,
        LblError.Text=“Požadovaný dokument neexistuje!“; // nastavit chybové hlášení
    }
  }
  catch
  { // nepodařilo se provést, zobrazit chybové hlášení
    LblError.Text=“Došlo k chybě při zpracování dokumentu…“;
  }
}
</script>
<html>
<head><title>Transfomace XML</title></head>
<body>
<asp:xml Id=“XmlParser1″ TransformSource=“Documents/Tabulka.xslt“ runat=“server“ />
<asp:label Id=“LblError“ runat=“server“ />
</body>
</html>

Jak vidíte, testujeme, zda je zadán parametr Document, ve kterém má být jméno zpracovávaného XML dokumentu bez přípony. Aby bylo možné ověřit, zda soubor existuje, je nutné rozšířit název souboru na kompletní cestu metodou Server.MapPath. To celé je ošetřeno konstrukcí pro zachycení výjimek try-catch. Pokud dojde k nějaké chybě, zobrazí se chybové hlášení pomocí Labelu LblError, který máme ve stránce pro účely takovýchto hlášení doplněn. Metod pro XML nabízí systém .NET mnohem více, od procházení XML výstupu z databáze (XmlReader,XmlTextReader) až pro práci s takzvanými Web Services. Ne vždy splní XML Web Control naše požadavky, pro letmý překlad nebo zobrazení XML obsahu (souboru či řetězce) však postačí. Je dobré si uvědomit, že pokud vznikne chyba až v průběhu zpracování Xml web controlu (např. chyba syntaxe xml nebo xslt souboru), dojde k výjimce, kterou v této ukázce neřešíme. Bylo by potřeba ji ošetřit vně naší aplikace.

Hotovou aplikaci je možné vsadit třeba mezi záhlaví a zápatí vytvořeného pomocí vlastního ovládacího prvku.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *