9 mars 2022
Les fonctions XPath collection() et document-uri()
collection()
Renvoie une séquence d’éléments identifiés par une URI, ou une collection par défaut si aucune URI n’est fournie.
collection('.?select=*.xml') <!-- retourne une collection de document xml -->
Pour récupérer le nom de chaque fichier, deux fonctions peuvent être utilisées : document-uri()
et base-uri()
.
voir document-uri() is not working when using collection().
document-uri()
Les documents lus à l’aide de la fonction
collection()
sont ajoutés au pool de documents (et ont donc une propriétédocument-uri()
) si et seulement si la collection est stable. Dans Saxon, pour des raisons de performance, les collections ne sont pas stables à moins que l’option de configurationSTABLE_COLLECTION_URI
ne soit activée ou que la stabilité ne soit demandée d’une autre manière, par exemple en incluant le paramètrestable=yes
dans l’URI de la collection.
<xsl:for-each select="collection('.?select=*.xml&content-type=application/xml&stable=yes')">
<xsl:variable name="filename" select="tokenize(base-uri(.), '/')[last()]"/>
<xsl:variable name="id" select="substring-before($filename, '.xml')"/>
<xsl:result-document method="text" href="output/{$id}.txt">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:for-each>
base-uri()
Il n’est pas nécessaire d’avoir une collection stable avec base-uri()
.
<xsl:for-each select="collection('.?select=*.xml')">
<xsl:variable name="filename" select="tokenize(base-uri(.), '/')[last()]"/>
<xsl:variable name="id" select="substring-before($filename, '.xml')"/>
<xsl:result-document method="text" href="output/{$id}.txt">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:for-each>