LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> Programujeme s XML (10.) - Cyklíme v XSLT

Minule jsme si ukázali, jak můžeme pomocí šablon nahrazovat elementy různým jiným obsahem, to nám ovšem často nestačí, proto se dnes podíváme, jak můžeme procházet sadu uzlů v cyklu.

3.8.2004 15:00 | Aleš Hakl | czytane 14020×

RELATED ARTICLES KOMENTARZE   

Také jsme náš telefoní seznam s úspěchem převedli na XHTML, co kdybychom ovšem chtěli změnit pořadí sloupců nebo nedejbože seznam seřadit? XSLT je jazyk velice mocný, a tak ani tento úkol nebude složitý.

Nejprve si zkusíme seznam upravit tak, aby prvním sloupcem bylo příjmení. Použijeme k tomu element xsl:for-each, kterým v šabloně pro kořenový element projdeme všechny elementy person a nahradíme je námi určeným obsahem.

         <xsl:for-each select="person">
            <tr>
              <td>
                <xsl:value-of select="surname" />
              </td>

              <td>
                <xsl:value-of select="first-name" />
              </td>
              <td>
                <xsl:value-of select="phone" />
              </td>

              <td>
                <xsl:value-of select="email" />
              </td>
            </tr> 
          </xsl:for-each>

Všímavý čtenář si jistě všimne nového elementu xsl:value-of, jímž vkládáme hodnoty ze vstupního souboru. Tento element slouží k vložení výsledku libovolného výrazu jazyka XPath do výsledného dokumentu, v našem případě jím vkládáme textové řetězce z původního souboru, což je asi nejčastější použití tohoto elementu.

Často můžeme použít pro stejný úkol jak několik samostatných šablon a element xsl:apply-templates tak i element xsl:for-each. Doporučuje se využívat elementu xsl:for-each tehdy, pokud máme dokument s jednoznačně definovanou strukturou a víme, kde které elementy hledat. Naopak řešení s elementem xsl:apply-templates se používá, pokud přesně nevíme, kde všude se elementy mohou vyskytovat, s výhodou například pro formátovaní textu, například:

  <xsl:template match="e">

    <em>
      <xsl:apply-templates />
    </em>
  </xsl:template>
  <xsl:template match="s">
    <strong>

      <xsl:apply-templates />
    </strong>
  </xsl:template>

Zde ovšem možnosti elementu xsl:for-each nekončí, také jej můžeme použít pro seřazení elementů podle nějakého kritéria pomocí elementu xsl:sort. Tento element má několik nepovinných atributů:

  • select - Jako již tradičně, výraz jazyka XPath specifikující hodnotu, podle které se bude řadit.
  • order - Určuje pořadí, může mít hodnotu "ascending" - vzestupně a "descending" - sestupně
  • case-order - Pokud je nastaven na "upper-first" dojde k seřazení velkých písmen před malá a v případě "lower-first" naopak.
  • lang - Jazyk jehož způsob řazení bude použit. (například že č patří mezi c a d a nikoli někam dozadu za z mezi Č a Ď)
  • data-type - Způsob řazení: číslený ("number", 0, 1, 2, 10...) nebo textový ("text", 0, 1, 10, 2...)

Pokud tedy chceme seřadit náš seznam podle příjmení přidáme na začátek elementu xsl:for-each element xsl:sort například takto:

. . .
          <xsl:for-each select="person">
            <xsl:sort select="surname"/> 
            <tr>
. . .

Samozřejmě je možné řadit podle více kritérií, uděláme to tak, že uvedeme více elementů xsl:sort, pokud bude více hodnot se stejnou hodnotou určenou v první elementu, použije se druhý a tak dále.

. . .
          <xsl:for-each select="person">
            <xsl:sort select="surname"/>
            <xsl:sort select="first-name"/>

            <tr>
. . .

Nakonec bych ještě doplnil že element xsl:sort je možné použít i s elementem xsl:apply-templates, napřríklad takto:

. . .
          <xsl:apply-templates>

            <xsl:sort select="surname"/>
            <xsl:sort select="first-name"/>
          </xsl:apply-templates>
. . .

Zde bych pro dnešek skončil a příště se poněkud podrobněji podíváme na jazyk XPath, který je velice silný, přestože ho dosud používáme pouze pro hledání elementů podle názvu.


KOMENTARZE

Nie ma komentarzy dla tej pozycji.

Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4873x
2. FreeBSD
Download: 9063x
3. PCLinuxOS-2010
Download: 8561x
4. alcolix
Download: 10943x
5. Onebase Linux
Download: 9658x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6240x

1. xinetd
Download: 2411x
2. RDGS
Download: 937x
3. spkg
Download: 4753x
4. LinPacker
Download: 9961x
5. VFU File Manager
Download: 3196x
6. LeftHand Mała Księgowość
Download: 7200x
7. MISU pyFotoResize
Download: 2805x
8. Lefthand CRM
Download: 3561x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3117x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz