Potřebujete pomoci s XSLT?
Nabízím školení, konzultace, vývoj XSLT kódu na zakázku. Nevájte a kontaktujte mne.

Podpořte provoz stránek
Platba probíhá pomocí služby PayPal a je možné platit kartou nebo převodem z vašeho PayPal účtu.

4.3 Práce s bílými znaky

4.3.1. Bílé znaky ve stylu
4.3.2. Bílé znaky ve vstupním dokumentu

4.3.1 Bílé znaky ve stylu

Ze stylu jsou před zpracováním vypuštěny všechny textové uzly, které obsahují pouze bílé znaky. To se nám v některých případech nemusí hodit.

Příklad 4.9. Odstranění bílých znaků – ws1.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="html" encoding="utf-8"/>

<xsl:template match="/">
  <html>
    <body>
      <p>
        <strong>
          <em>Ahoj</em>  
        </strong>
      </p>
      <p>
      Výstup do několika řádek
      zalamování lze tímto způsobem ovlivnit
      jen v uzlech, které obahují nějaké tisknutelné 
      znaky.</p>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

V tomto stylu jsou automaticky odstraněny konce řádek za počátečními elementy, protože mezi nimi jsou jen bílé znaky. Na výstupu tak dostaneme:

<html>
   <body>
      <p><strong><em>Ahoj</em></strong></p>
      <p>
         Výstup do několika řádek
         zalamování lze tímto způsobem ovlivnit
         jen v uzlech, které obahují nějaké tisknutelné 
         znaky.
      </p>
   </body>
</html>

Bílé znaky jsou ve stylu zachovávány jen uvnitř elementu xsl:text. Do tohoto elementu můžeme například vložit znak pro konec řádky.

Příklad 4.10. Zachování bílých znaků – ws2.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="html" encoding="utf-8"/>

<xsl:template match="/">
  <html>
    <body>
      <p><xsl:text>&#xA;</xsl:text>
        <strong><xsl:text>&#xA;</xsl:text>
          <em>Ahoj</em><xsl:text>&#xA;</xsl:text>
        </strong><xsl:text>&#xA;</xsl:text>
      </p>
      <p>
      Výstup do několika řádek
      zalamování lze tímto způsobem ovlivnit
      jen v uzlech, které obahují nějaké tisknutelné 
      znaky.</p>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Obdržíme pak korektní výstup s konci řádek tam, kde je očekáváme.

<html>
   <body>
      <p>
         <strong>
            <em>Ahoj</em>
         </strong>
      </p>
      <p>
         Výstup do několika řádek
         zalamování lze tímto způsobem ovlivnit
         jen v uzlech, které obsahují nějaké tisknutelné 
         znaky.
      </p>
   </body>
</html>

Pokud potřebujeme do výstupního dokumentu ručně vkládat konce řádek, můžeme opět využít trik s interními textovými entitami.

Příklad 4.11. Zachování bílých znaků elegantněji – ws3.xsl

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY LF "<xsl:text>&#xA;</xsl:text>">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:output method="html" encoding="utf-8"/>

<xsl:template match="/">
  <html>
    <body>
      <p>&LF;
        <strong>&LF;
          <em>Ahoj</em>&LF;
        </strong>&LF;
      </p>
      <p>
      Výstup do několika řádek
      zalamování lze tímto způsobem ovlivnit
      jen v uzlech, které obahujé nějaké tisknutelné 
      znaky.</p>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

4.3.2 Bílé znaky ve vstupním dokumentu

Ve vstupním dokumentu se textové elementy, které obsahují pouze bílé znaky, automaticky neruší.

Odstraní se pouze ty přebytečné textové uzly s bílými znaky, které jako svého rodiče mají element uvedený v seznamu elementů u instrukce <xsl:strip-space>. Ve stromu dokumentu naopak zůstanou uzly, které mají jako svého rodiče element uvedený v instrukci <xsl:preserve-space>. Seznam elementů se zadává pomocí atributu elements a můžeme v něm použít mezerami oddělený seznam atributů, případně hvězdičku pro všechny elementy.

Vyšší váhu než předchozí dvě instrukce má nastavení atributu xml:space na hodnotu preserve u elementu nebo u některého z jeho předků.

V praxi se odstranění nepotřebných textových uzlů projeví v kratším výstupním dokumentu – implicitní textovou šablonou nejsou na vstup kopírovány přebytečné mezery.

© Jiří Kosek 2014

Tento dokument je určen výhradně pro osobní potřebu seznámení s jazykem XSLT. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií, použití při školeních a výuce apod. je výslovně zakázáno a bude považováno za porušení autorských práv.


Copyright © 2000-2014 Jiří Kosek