V tomto článku si ukážeme, jak snadno začlenit do naší aplikace data, která máme na serveru uložená v souboru formátu XML. Pomocí šablony XSLT provedeme tranformaci a data budou v aplikaci formátovaná přesně jak potřebujeme.

Pro transformaci využijeme metod MS XMLDOM, pro popis XML a XSL zájemce odkazuji na Slabikář XML. Prohlédněte si ukázku (zdrojový kód).

Nejdříve si vytvoříme XML soubor (např. výpis článků):

<?xml version=“1.0″ encoding=“Windows-1250″?>
   <vypis>
      <clanek>
         <nadpis>Uživatelé a přístupová práva v MySQL</nadpis>
         <link>http://interval.cz/clanek.asp?article=857</link>
      </clanek>

      <clanek>
         <nadpis>SQL – vkládání a aktualizace dat v tabulce</nadpis>
         <link>http://interval.cz/clanek.asp?article=330</link>
      </clanek>
</vypis>

Dále potřebujeme XSLT šablonu pro formátování XML dat, může vypadat například takto:

<?xml version=“1.0″ encoding=“Windows-1250″?>
<xsl:stylesheet version=“1.0″ xmlns:xsl=“http://www.w3.org/1999/XSL/Transform“>
  <xsl:output method=“xml“ omit-xml-declaration=“yes“ indent=“yes“ encoding=“Windows-1250″ />
  <xsl:template match=“/“>
    <xsl:for-each select=“vypis/clanek“>
      <a>
        <xsl:attribute name=“href“><xsl:value-of select=“link“ /></xsl:attribute>
        <xsl:value-of select=“nadpis“ />
      </a>
      <br />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Nyní vytvoříme příklad ASP stránky, do které budeme includovat soubor s funkcí (popíši dále), zajišťující vlastní tranformaci:

<!– #include file=“XMLXSL.inc.asp“ –><?xml version=“1.0″ encoding=“windows-1250″ ?>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“ xml:lang=“cs“ lang=“cs“ dir=“ltr“>
  <head>
    <meta http-equiv=“Content-type“ content=“text/html; charset=windows-1250″ />
    <title>XML transformace Demo</title>
  </head>
  <body>
    <div style=“margin:6px;padding:6px;background-color:Beige;width:300px“>
      <% getXML „Articles.xml“,“Articles.xslt“ %>
    </div>
  </body>
</html>

Vidíme, že stránka obsahuje include souboru s procedurou getXML, která je následně použita v serverovém kódu vnořeném do divu. Výsledkem zpracování této procedury je pouze výstup HTML kódu, proto ve své aplikaci můžete samozřejmě použít uvedenou proceduru libovolněkrát chcete a vůbec ji třeba ani do žádného kontaineru nevnořovat.

Nyní se konečně dostáváme k vlastnímu provedení transformace – popíšeme si obsah souboru s procedurou, pojmenovaného XMLXSL.inc.asp:

<script language=“VBScript“ runat=“server“>
Sub getXML(ByVal xmlFile, ByVal xslFile)
  Dim sourceXML, sourceXSLT // deklarace objektů
  Set sourceXML = Server.CreateObject(„Microsoft.XMLDOM“) // nastavit sourceXML jako nový objekt XMLDOM
  Set sourceXSLT = Server.CreateObject(„Microsoft.XMLDOM“) // nastavit sourceXSLT jako nový objekt XMLDOM
  sourceXML.load(Server.MapPath(xmlFile)) // naplnit sourceXML naším XML souborem
  sourceXSLT.load(Server.MapPath(xslFile)) // naplnit sourceXSLT naším XSLT souborem
  sourceXML.transformNodeToObject sourceXSLT, Response // provést transformaci a výsledek předat objektu Response
  Set sourceXML = Nothing // uklidit po sobě
  Set sourceXSLT = Nothing // uklidit po sobě :)
End Sub
</script>

Procedura si založí dva nové objekty XMLDOM. Jakmile jsou objekty k dispozici, můžeme na nich provádět různé metody – pomocí load je naplníme XML souborem a souborem šablony XSLT. Dále uplatníme metodu transformNodeToObject, která provede vlastní tranformaci a výsledek předá v našem případě objektu Response. Mohli bychom použít i metodu transformNode, jejímž výsledkem je text (řetězec) a tento pak předat jako parametr metodě Write objektu Response – při tomto použití však dle informací Microsoftu může dojít k problémům s konverzí neobvyklých znaků.

Ve finální aplikaci by se patřilo ještě ošetřit možné chybové stavy, které mohou vzniknout například chybějícím nebo nepřístupným souborem XML nebo souborem šablony XSLT, ale také jejich chybnou syntaxí. Oproti ASP.NET zde nemáme žádný další komfort například v podobě cachování, proto je tento způsob vhodný opravdu jen tam, kde z nějakého důvodu ASP.NET nemůžeme použít (pokud je například projekt příliš rozsáhlý, než aby bylo možné stávající ASP stránky jednoduše upravit na ASP.NET, nebo využívá práci sessions, které neumožňují koexistenci ASP i ASP.NET stránek v rámci jedné aplikace).

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět