Czy jest możliwe wygenerowanie za pomocą jednej transformaty XSLT wielu plików, np. kilku dokumentów podrzędnych i jednego głównego ze spisem treści?
Tak, o ile korzystamy z XSLT w wersji co najmniej 2.0.
Oto przykład:
Załóżmy, że mamy następujący dokument XML:
<?xml version="1.0" encoding="UTF-8"?> <prawo> <autor>Isaac Newton</autor> <nazwa>Zasady dynamiki</nazwa> <zasada> <nazwa>I zasada dynamiki (zasada bezwładności)</nazwa> <tresc>W inercjalnym układzie odniesienia, jeśli na ciało nie działa żadna siła lub siły działające równoważą się, to ciało pozostaje w spoczynku lub porusza się ruchem jednostajnym prostoliniowym.</tresc> </zasada> <zasada> <nazwa>II zasada dynamiki</nazwa> <tresc>W inercjalnym układzie odniesienia, jeśli siły działające na ciało nie równoważą się (czyli wypadkowa sił jest różna od zera), to ciało porusza się z przyspieszeniem wprost proporcjonalnym do siły wypadkowej, a odwrotnie proporcjonalnym do masy ciała.</tresc> </zasada> <zasada> <nazwa>III zasada dynamiki (zasada akcji i reakcji)</nazwa> <tresc>Oddziaływania ciał są zawsze wzajemne. W inercjalnym układzie odniesienia siły wzajemnego oddziaływania dwóch ciał mają takie same wartości, taki sam kierunek, przeciwne zwroty i różne punkty przyłożenia (każda działa na inne ciało).</tresc> </zasada> </prawo>
Plik transformaty wygląda następująco:
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="html" /> <xsl:template match="/prawo"> <xsl:result-document href="prawo.html"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h2><xsl:value-of select="nazwa" /></h2> <ul><xsl:apply-templates select="zasada" /></ul> </body> </html> </xsl:result-document> </xsl:template> <xsl:template match="zasada"> <xsl:variable name="n"> <xsl:number /> </xsl:variable> <li><a href="zasada{$n}.html"> <xsl:value-of select="nazwa" /> </a></li> <xsl:result-document href="zasada{$n}.html"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1><xsl:value-of select="nazwa" /></h1> <xsl:value-of select="tresc" /> </body> </html> </xsl:result-document> </xsl:template> </xsl:stylesheet>
W wyniku transformacji powstanie plik prawo.html o następującej zawartości:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h2>Zasady dynamiki</h2> <ul> <li><a href="zasada1.html">I zasada dynamiki (zasada bezwładności)</a></li> <li><a href="zasada2.html">II zasada dynamiki</a></li> <li><a href="zasada3.html">III zasada dynamiki (zasada akcji i reakcji)</a></li> </ul> </body> </html>
oraz pliki podrzędne o nazwach: zasada1.html, zasada2.html oraz zasada3.html