Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 57

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?

  • Zapytał
  • @ | 12.12.2015
  • TRENER MODERATOR ALTKOM AKADEMII
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

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

  • Odpowiedział
  • @ | 12.12.2015
  • TRENER MODERATOR ALTKOM AKADEMII