Fonction document() |
Permet de traiter plusieurs documents sources dans une feuille de style simple. Cette fonction extrêmement puissante et flexible étant décrite au chapitre 7, elle ne fera ici l'objet que d'une présentation succinte.
Entrées
La fonction document() prend généralement une chaîne comme argument ; cette chaîne est traitée comme un URI que le processeur XSLT tente d'ouvrir et d'analyser. Si la chaîne est vide (la fonction appelée est document('')), la fonction document() analyse la feuille de style en question. Voir Section 7.3 du chapitre 7 pour obtenir toutes les informations relatives aux paramètres de la fonction document().
Sortie
Ensemble de nœuds contenant les nœuds identifiés par l'argument d'entrée. Une fois encore, le chapitre 7 contenant toutes les informations requises, elles ne seront pas décrites ici.
Définie dans
XSLT section 12.1, Plusieurs Documents Sources.
Exemple
L'exemple suivant utilise la fonction document() avec une chaîne vide pour implémenter une table de recherche. L'exemple du document XML est le suivant :
    <?xml version="1.0"?>
    <report>
      <title>Miles Flown in 2001</title>
      <month sequence="01">
        <miles-flown>12379</miles-flown>
        <miles-earned>35215</miles-earned>
      </month>
      <month sequence="02">
        <miles-flown>32857</miles-flown>
        <miles-earned>92731</miles-earned>
      </month>
      <month sequence="03">
        <miles-flown>19920</miles-flown>
        <miles-earned>76725</miles-earned>
      </month>
      <month sequence="04">
        <miles-flown>18903</miles-flown>
        <miles-earned>31781</miles-earned>
      </month>
    </report>
La fonction document() peut être utilisée pour convertir l'attribut sequence de l'élément <month> et lui donner le nom du mois correspondant. La feuille de style est la suivante :
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:months="Lookup table for month names">

      <months:name sequence="01">January</months:name>
      <months:name sequence="02">February</months:name>
      <months:name sequence="03">March</months:name>
      <months:name sequence="04">April</months:name>
      <months:name sequence="05">May</months:name>
      <months:name sequence="06">June</months:name>
      <months:name sequence="07">July</months:name>
      <months:name sequence="08">August</months:name>
      <months:name sequence="09">September</months:name>
      <months:name sequence="10">October</months:name>
      <months:name sequence="11">November</months:name>
      <months:name sequence="12">December</months:name>

      <xsl:output method="text"/>

      <xsl:variable name="newline">
    <xsl:text>
    </xsl:text>
      </xsl:variable>

      <xsl:template match="/">
        <xsl:value-of select="$newline"/>
        <xsl:text>A test of the document() function:</xsl:text>

        <xsl:value-of select="$newline"/>
        <xsl:value-of select="$newline"/>
        <xsl:for-each select="/report/month">
          <xsl:text>   </xsl:text>
          <xsl:value-of
            select="document('')/*/months:name[@sequence=current()/@sequence]"/>
          <xsl:text> - </xsl:text>
          <xsl:value-of select="format-number(miles-flown, '##,###')"/>
          <xsl:text> miles flown, </xsl:text>
          <xsl:value-of select="format-number(miles-earned, '##,###')"/>
          <xsl:text> miles earned.</xsl:text>
          <xsl:value-of select="$newline"/>
          <xsl:text>      (Averaged </xsl:text>
          <xsl:value-of
            select="format-number(miles-earned div miles-flown, '##.#')"/>
          <xsl:text> miles earned for each mile flown.)</xsl:text>

          <xsl:value-of select="$newline"/>
          <xsl:value-of select="$newline"/>
        </xsl:for-each>
      </xsl:template>

    </xsl:stylesheet>
Les résultats sont les suivants, les noms de mois corrects sont inclus dans la sortie :
    A test of the document() function:

       January - 12,379 miles flown, 35,215 miles earned.
          (Averaged 2.8 miles earned for each mile flown.)

       February - 32,857 miles flown, 92,731 miles earned.
          (Averaged 2.8 miles earned for each mile flown.)

       March - 19,920 miles flown, 76,725 miles earned.
          (Averaged 3.9 miles earned for each mile flown.)

       April - 18,903 miles flown, 31,781 miles earned.
          (Averaged 1.7 miles earned for each mile flown.)