UMEÅ UNIVERSITET Institutionen för informatik Andreas Lund alund@informatik.umu.se Kompletterande exempel till XSLT Inledning Denna text är avsett som komplement till det bokkapitel i kompendiet som behandlar XSLT. Framförallt behandlas det iteration och användingen av NetBeans som XSLTprocessor. Exemplena använder sig av ett XML-dokument i form av ett RSS-dokument (version 2.0) och omvandlar det till HTML på olika sätt. NetBeans som XSLT-processor För att kunna göra omvandlingar av XML-dokument med hjälp av XSLT måste man ha en XSLT-processor. Det finns färdiga klasser att använda för detta ändamål och det är inte särskilt komplicerat att inkorporera sådan XSLT-funktionalitet i egenutvecklade Java-program. Ett gott råd är att försöka göra en klass som hanterar transformation av DOM-träd till en String eller kanske direkt till fil. En startpunkt är The Quintessential Program That Transforms an XML File with XSL i The Java Developer Almanac (www.javalmanac.com). NetBeans har dock färdig funktionalitet för att göra denna typ av omvandlingar. Så här går du tillväga. Skapa eller öppna din XSLT-mall. Om du ska skapa en ny mall kan du göra det genom att välja XSL Stylesheet från XML-kategorin bland alla de templates som finns tillgängliga i NetBeans.
Öppna det XML-dokument som du vill omvandla. Högerklicka i textredigeringsdelen av NetBeans och välj XSL Transformation.Du kommer då att få nedanstående dialog presenterad: XSLT Script avser själva XSLT-mallen som bestämmer hur omvandlingen ska gå till.det finns lite olika typer av Output-alternativ. Med ovanstående inställningar kommer resultatet av omvandlingen att öppnas i en separat webläsare. Iteration med XSLT Som nämns i XSLT-materialet i kompendiet finns det möjlighet till iteration med XSLT, men det behandlas dock inte närmare än så. Nedanstående exempel visar hur detta kan gå till. Tanken är att resultatet av omvandlingen av ett RSS-dokument ska ge ett resultat som ser ut som i bilden efter nedanstående XSLT-kod. <html> <p><xsl:value-of select="link"/></p>
De femarkerade raderna utgör själva iteration och innebörden kan beskrivas som att XSLT-processorn för varje item-element som finns i den aktuella kontexten (/rss/channel) skriver ut värdet av tre olika element (title, description och link), samt bäddar in dessa värden i html-taggar. Det finns dessutommöjlighet att sortera i samband med iteration. För att åstadkomma en sortering med avseende på varje nyhets titel kan koden förändras på följande sätt:
<html> <xsl:sort select="title"/> <p><xsl:value-of select="link"/></p> Genom XSL-elementet <xsl:sort select="title"/> instruerar jag XSLT-processorn att inte bara iterera igenom samtliga item-element, utan att också göra det i en speciell ordning, nämligen i stigande bokstavsordning med avseende på title-elemented som ingår i item. Attributvärdesmallar I utdraget från XML in a Nutshell finns ett avsnitt om det som kallas attribute value templates (sidan 159). Det som beskrivs där kan bli särskilt relevant om vi vill skapa HTML-dokumet med länkar vars länkreferens inte kan hårdkodas in i XSLTmallen. Låt säga att vi vill att länken i varje item-element ska bli klickbar så att användaren har möjlighet att gå till den långa versionen av nyheten. Syntaxen för länkar i html kan illustreras på följande sätt: <a href= http://www.informatik.umu.se/ >Institutionen för informatik</a> Om vi vill skapa denna typ av länkar med XSLT kan man göra på följande sätt: <html> <xsl:sort select="title"/> <p><a href="{link}"><xsl:value-of select="link" /></a></p>