Den här handledningen förklarar vad XSLT är, dess omvandlingar, element och användning med exempel samt vikten av XPath för att utveckla XSLT-omvandlingskod:

Termen "XSLT" skapas genom att kombinera två ord, nämligen "XSL" och "T", "XSL" är en förkortning av "Extensible Stylesheet Language" och "T" är en förkortning av "Transformation".

XSLT är alltså i princip ett omvandlingsspråk som används för att omvandla/konvertera XML-källdokument till XML-dokument eller till andra format, t.ex. HTML, PDF, med hjälp av XSL-FO (Formatting Objects) osv.

Introduktion till XSLT

Omvandlingen sker med hjälp av XSLT-processorn (som Saxon, Xalan). XSLT-processorn tar ett eller flera XML-dokument som källa med en XSLT-fil som innehåller XSLT-kod och resultatet/utdatadokumenten genereras senare, vilket visas i diagrammet nedan.

XSLT-processorn analyserar käll-XML-dokumenten med hjälp av X-Path för att navigera över olika källelement från rotelementet till slutet av dokumenten.

Allt du behöver veta om X-Path

XSLT-omvandling

För att påbörja omvandlingen behöver vi ett XML-dokument som XSLT-koden ska köras på, själva XSLT-kodfilen och verktyget eller programvaran med XSLT-processor (du kan använda en gratisversion eller testversion av programvaran för att lära dig).

#1) XML-kod

Nedan finns den XML-källkod som XSLT-koden kommer att köras på.

Filnamn: Böcker.xml

 XSLT Programmer's Reference Michael Kay Wrox $40 4th Head First Java Kathy Sierra O'reilly $19 1st SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd 

#2) XSLT-kod

Nedan följer XSLT-koden som kommer att köras på ovanstående XML-dokument.

Filnamn: Böcker.xsl

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

#3) Resultat/utgångskod

Nedanstående kod kommer att produceras efter att XSLT-koden har använts på XML-dokumentet ovan.

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e
3741122298 Huvudet först Java Kathy Sierra O'reilly $19 1:a
9987436700 SQL Den fullständiga referensen James R. Groff McGraw-Hill $45 3:e

#4) Visa resultat/utgång i webbläsaren

Böcker:

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e
3741122298 Huvudet först Java Kathy Sierra O'reilly $19 1:a
9987436700 SQL Den fullständiga referensen James R. Groff McGraw-Hill $45 3:e

XSLT-element

För att förstå XSLT-koden ovan och hur den fungerar måste vi först förstå de olika XSLT-elementen och deras attribut.

#1) ELLER

Varje XSLT-kod måste börja med rotelementet antingen eller .

Egenskaper:

  • @xmlns:xsl: Kopplar XSLT-dokumentet till XSLT-standarden.
  • @version: Definierar versionen av XSLT-koden för parseraren.

#2)

Denna deklaration definierar en uppsättning regler som tillämpas för att bearbeta eller omvandla det valda inmatningselementet i källdokumentet till de definierade reglerna för målelementet i utgångsdokumenten.

Det finns två typer av mallar beroende på deras egenskaper:

(i) Namngiven mall: När xsl:template-elementet innehåller attributet @name kallas detta för namngiven mall.

Namngivna mallar anropas med elementet xsl:call-template.

(ii) Matchmall: Elementet xsl:template innehåller attributet @match som innehåller ett matchningsmönster eller XPath som tillämpas på ingångsnoderna.

Matchningsmallar anropas av xsl:apply-template-elementet.

xsl:template-elementet måste ha antingen @match-attributet eller @name-attributet eller båda. Ett xsl:template-element som inte har något match-attribut får inte ha något mode-attribut och inget priority-attribut.

Låt oss skriva om ovanstående XSLT(

a) XSLT-kod baserad på Match Template med . Se nedan gul & gråmarkerad ändrad kod, den kommer att ge samma resultat som ovan.

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

Se skärmbilden för det markerade området:

b) XSLT-kod baserad på den namngivna mallen med . Se nedan gul & gråmarkerad ändrad kod, den kommer att ge samma resultat som ovan.

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

Se skärmbilden för det markerade området:

#3)

Processorn hittar och tillämpar alla mallar som har XPath definierat i @select-attributet.

@mode-attributet används också om vi vill ge mer än ett sätt att ge utdata med samma innehåll.

#4)

Processorn anropar mallen som har ett värde i attributet @name (obligatoriskt).

används för att skicka parametrar till mallen.

#5)

Ange sträng-/textvärdet för det XPath-uttryck som definieras i attributet @select, enligt definitionen i koden ovan.

Detta ger värdet för bokens namn.

#6) : Upprepning

Detta kommer att bearbeta instruktionerna för varje uppsättning noder (xpath definierad i attributet @select (obligatoriskt)) i den sorterade sekvensen.

Ovanstående kod innebär att varje nod har en uppsättning av butiks-/boksresurser för varje nod:

/store/book[1]

/store/book[2]

/store/book[3]

kan också användas som ett underordnat element till xsl:for-each för att definiera sorteringsordningen.

#7) : Villkorlig bearbetning

xsl:if-instruktionerna bearbetas endast om det booleska värdet i attributet @test är sant, annars utvärderas inte instruktionen och den tomma sekvensen returneras.

 2"> Villkor sant: Antalet böcker är fler än två. 

Resultat: Villkor sant: Antalet böcker är fler än två.

Här är count() den fördefinierade funktionen.

#8) : Alternativ bearbetning av villkor

xsl:choose har flera orsaker till olika villkor som testas i @test-attributet i xsl:when-elementen, det testvillkor som blir sant först av alla xsl:when-element kommer att behandlas först och det finns ett valfritt xls:otherwise-element så att om inget av villkorstesterna blir sant så kommer detta xsl:otherwise att beaktas.

 Villkoret är sant: antalet böcker är ett. Villkoret är sant: antalet böcker är två. Villkoret är sant: antalet böcker är tre. Inget villkor stämmer överens. 

Resultat: Villkor True: Bokens antal är tre.

#9)

xsl:copy fungerar på kontextelementet, dvs. om det är en nod så kopieras kontextnoden till den nyligen genererade noden, men inte dess barn. Av denna anledning kallas detta för en ytlig kopia. Till skillnad från xsl:copy-of-elementet har xsl:copy inte attributet@select.

I koden nedan kopieras kontextelementen till utdata & alla barnelement kallas & kopieras av xsl:apply-template rekursivt.

node() Står för alla noder och alla deras attribut rekursivt.

Resultat: Detta kommer att kopiera alla noder och attribut i källdokumentet rekursivt till utdatadokumentet, dvs. det kommer att skapa en exakt kopia av källdokumentet.

#10)

xsl:copy-of kopierar som standard sekvensen av noder med alla dess barn och attribut rekursivt, på grund av detta kallas detta även för djup kopiering. @select-attributet krävs för utvärderingen av XPath.

Resultat: Detta kommer att kopiera alla noder och attribut i källdokumentet rekursivt till utdatadokumentet, dvs. det kommer att skapa en exakt kopia av källdokumentet.

Står för en kopia av den aktuella noden och det aktuella attributet.

#11)

Det här elementet används för att skriva en kommentar till målresultatet. Allt textinnehåll som har denna tagg kommer att skrivas ut som kommenterat.

Detta kommer att skrivas ut som en kommentarsnod.

Resultat:

#12)

Detta kommer att generera en textnod i resultatdokumentet, värdet i xsl:text kommer att skrivas ut som en sträng till utdata.

Detta är en

textrad.

Utgång:

Detta är en

textrad.

#13)

Detta kommer att generera ett element i resultatdokumentet med det namn som anges i attributet @name. attributet name är det obligatoriska attributet.

Resultat: 5350192956

#14)

Detta kommer att generera ett attribut till dess överordnade element i resultatdokumentet. Attributets namn definieras av attributet name och attributets värde beräknas med hjälp av den XPath som nämns i attributet select enligt koden nedan. Name-attributet är ett obligatoriskt attribut.

Resultat:

#15)

Det här elementet sorterar den valda noden i en sekvens i stigande eller fallande riktning. Noden eller XPath anges genom @select-attributet och sorteringsriktningen definieras genom @order-attributet.

I koden nedan får vi fram alla böcker i alfabetisk ordning enligt boknamnet.

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

Se denna skärmdump för det markerade området:

Resultat: Listan nedan innehåller boknamnen i alfabetisk ordning, dvs. i stigande ordning.

Böcker:

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
3741122298 Huvudet först Java Kathy Sierra O'reilly $19 1:a
9987436700 SQL Den fullständiga referensen James R. Groff McGraw-Hill $45 3:e
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e

#16)

Det här elementet deklarerar en variabel som innehåller ett värde. En variabel kan vara en global variabel eller en lokal variabel. Variabelns namn definieras med attributet @name och det värde som variabeln kommer att innehålla definieras med attributet @select.

Tillgången till den globala variabeln är global, dvs. variablerna kan anropas i vilket element som helst och förblir tillgängliga i formatmallen.

För att definiera en global variabel behöver vi bara deklarera den bredvid stilbladets rotelement, vilket visas i koden nedan i den gulmarkerade koden, variabeln "SecondBook" är den globala variabeln och innehåller namnet på den andra boken.

Tillgången till den lokala variabeln är lokal för det element där den definieras, dvs. variabeln är inte tillgänglig utanför det element där den definieras, vilket visas i den gråmarkerade koden nedan, där variabeln "first book" är en lokal variabel och innehåller namnet på den första boken.

För att göra ett anrop till antingen den globala variabeln eller den lokala variabeln används dollarsymbolen ($) före variabelns namn, vilket visas nedan med gul markering. $ .

 Första bokens namn: Andra bokens namn: 

Se skärmbilden för det markerade området:

Resultat:

Första bokens namn: XSLT Programmer's Reference

Andra bokens namn: Head First Java

#17)

Det här elementet används för att deklarera nycklar, för att matcha mönstervärden till den specifika nyckeln.

Name är en leverantör till den nyckeln med attributet @name(" get-publisher "), som senare används i key()-funktionen. @match-attributet används för att indexera inmatningsnoden med XPath-uttryck (" bok "), som i nedanstående gulmarkerade @match används för att indexera alla böcker som finns i butiken.

I förhållande till @match-attributet används @use-attributet, som anger att noden ska hämta värdet för den nyckeln genom XPath-uttrycket ("publisher").

Om vi nu antar att vi behöver information om en bok som endast publiceras av Wrox-förlaget kan vi enkelt få fram det värdet genom xsl:key-elementet genom att skapa ett nyckel-värdepar.

key('get-publisher', 'Wrox') Key() tar emot två parametrar, den första är namnet på nyckeln, som i det här fallet är "get-publisher", den andra är strängvärdet som ska sökas, vilket i vårt fall är "Wrox".

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

Se skärmbilden för det markerade området:

Resultat:

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e

Resultat / HTML-visning:

Böcker:

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e

#18)

Det här elementet används för felsökning vid XSLT-utveckling. Elementet ger utdata till programmets standardutdataskärm.

@terminate-attributet används med två värden, antingen "yes" eller "no". Om värdet är "yes" avslutas analysatorn omedelbart så snart testvillkoret är uppfyllt för att meddelandet ska kunna utföras.

För att förstå detta antar vi att om priselementet i vårt indatadokument av misstag blir tomt som i koden nedan, så bör bearbetningen avbrytas omedelbart så snart processorn möter det tomma priselementet, vilket enkelt kan uppnås genom att använda xsl:message i if-testvillkoret som i XSLT-koden nedan.

Debuggervarning visas på programmets standardskärm: Behandlingen avslutades av xsl:message på rad 21.

Inmatad XML-kod:

 SQL The Complete Reference James R. Groff McGraw-Hill 3rd 

Se skärmbilden för det markerade området:

XSLT-kod:

Böcker:-

Avslutande: priselementet är tomt.
Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga

Se skärmbilden för det markerade området:

Resultat: Observera att så snart parsern stöter på den tomma prismarkeringen avslutar den omedelbart behandlingen, vilket innebär att slutmarkeringarna , och inte kommer i slutet av filen.

Böcker:-

Bok-ID Bokens namn Författarens namn Förlag Pris Upplaga
5350192956 XSLT-programmerarens referens Michael Kay Wrox $40 4:e
3741122298 Huvudet först Java Kathy Sierra O'reilly $19 1:a

Se skärmbilden för det markerade området:

#19) &

Elementet definierar parametern för mallen om den definieras inuti . Den kan definieras antingen inuti som global parameter eller inuti som lokal parameter för den mallen.

Värdet för den skickas/förs när mallen anropas av eller . .

skickas värdet av den parameter som definierats i Ett attribut som @name innehåller parameterns namn som ska matcha elementets @name-attribut. @Select-attributet används för att ange ett värde för parametern.

För att hämta parameterns värde på samma sätt som en variabel används dollartecken ($).

XML-kod för källkod:

 XSLT Programmer's Reference Michael Kay Wrox $40 4th Head First Java Kathy Sierra O'reilly $19 1st SQL The Complete Reference James R. Groff McGraw-Hill $45 3rd 

XSLT-kod:

Förteckning över böcker Namn :-

Bokens namn:

Se skärmbilden för det markerade området:

Resultat Utskrift:

Förteckning över böcker Namn :-

Bokens namn: XSLT Programmer's Reference

Bokens namn: Head First Java

Bokens namn: SQL The Complete Reference

#20)

används för att importera en annan stilbladsmodul i det aktuella stilbladet, vilket bidrar till en modulär XSLT-utveckling.

Efter import kan alla mallar användas. Prioriteten för de mallar som definieras i det överordnade formatbladet (som importerar ett annat formatblad) är högre än det importerade formatbladet (som importeras av det överordnade formatbladet).

Om ett annat formatmallblad också har samma namnmall som definieras i mallen som importeras, åsidosätts de utländska mallarna av din egen mall.

Attributet @href används som URI för det formatmallblad som du vill importera.

#21)

På samma sätt som xsl:import ovan hjälper det också till att uppnå en modulär XSLT-utvecklingsmetod. Alla mallar som inkluderas i XSLT har samma prioritet/prekreditering som det anropande formatmallen. Det är som om du kopierar alla mallar från en annan formatmall till din egen formatmall.

Attributet @href används som URI för det formatmallblad som du vill importera.

#22)

Det här elementet används för att specificera resultatträdet i utdatafilen. Det innehåller attribut som @method som kan ha värden som "XML", "HTML", "XHTML" och "text" och som standard är "XML".

@encoding anger den teckenkodning som kommer med i utdatafilen enligt exemplet nedan encoding="UTF-16″, standardvärdena för XML eller XHTML kan vara antingen UTF-8 eller UTF-16. @indent anger indragningen av XML- eller HTML-utdatakoden, för XML är standardvärdet "no" och för HTML och XHTML är standardvärdet "yes".

#23)

Det här elementet används för att ta bort icke-signifikanta vitrymder för det angivna källelementet i @element-attributet och om vi vill ta bort vitrymder från alla element kan vi använda "*" i @elements-attributet.

#24)

Det här elementet används för att bevara vitrymder för det angivna källelementet i @element-attributet och om vi vill bevara vitrymder från alla element kan vi använda "*" i @elements-attributet.

Slutsats

I den här artikeln har vi alltså lärt oss om XSLT, ofta använda XSLT-element, deras användning med exempel på källkod och mål/resultatkod, konvertering eller omvandling av källelementet till målelementet.

Vi diskuterade också vikten av XPath för att utveckla XSLT-konverteringskod. Vi har sett XSL-malldeklaration och mallkallning & överlämnande av parametrar. Vi lärde oss att deklarera globala och lokala variabler, deras användning i XSLT-koden och hur man kallar dem.

Vi lärde oss om olika grenar eller villkorliga XSLT-element som xsl:if, xsl:for-each, xsl:choose. Vi förstod skillnaden mellan ytlig kopiering och djup kopiering, sortering av noder, felsökning av XSLT-kod med hjälp av xsl:message, skillnaden mellan namngivna mallar och matchmallar och formatering av utdata med hjälp av xsl:output.

Om författaren : Himanshu P. är en erfaren yrkesman inom området informationsteknik. Han har arbetat med ITC MNCs inom olika affärsområden och med flera olika tekniker. Himanshu har som favoritsysselsättning att läsa tidskrifter och blogga.

Scrolla till toppen