Mise à jour en masse de documents avec XSLT

illustrations illustrations illustrations illustrations illustrations illustrations illustrations

Publié le 26 mai 2022 par Andrew Owen (3 minutes)

post-thumb

XSLT (Extensible Stylesheet Language Transformations) est un langage permettant de transformer des documents XML en d’autres documents. Je l’ai déjà mentionné dans mon article sur la création de notes de publication à partir de Jira.

Maintenant que tous les documents sont stockés en XML ou peuvent être facilement convertis en XML, XSLT est un excellent moyen d’effectuer un traitement par lots sur ces documents.

Pour utiliser XSLT, vous avez besoin d’un processeur XSLT. Si vous vous en tenez à la version 1.0 de la spécification, vous avez l’embarras du choix. Mais si vous souhaitez prendre en charge la dernière version (3.0 au moment de la rédaction), vous avez le choix entre RaptorXML (intégré à l’éditeur XML XMLSpy d’Altova) et Saxon. Comme mon éditeur XML préféré est XMLmind’s XML Editor (XXE), j’utilise Saxon. Saxon et XXE ont tous deux des éditions gratuites pour un usage personnel et des projets open source.

Soit dit en passant, j’utilise XXE depuis plus de dix ans. Si vous devez écrire des documents dans un format XML comme DocBook ou DITA, c’est le seul éditeur que je recommande. Il dispose d’une interface WYSIWYG, de raccourcis clavier pour tout et vous n’avez que rarement à vous occuper des balises.

Lorsque vous utilisez le processeur pour appliquer vos déclarations XSLT à un fichier, il crée une nouvelle sortie, laissant les fichiers d’origine inchangés. Bien qu’il s’agisse d’un langage spécialisé, XSLT est Turing-complet, ce qui signifie que vous pouvez effectuer tout type de calcul dont vous pourriez avoir besoin avec lui.

Voici un exemple que j’ai créé pour convertir les balises <b> et <span class="BodyWord"> en balises <span class="Emphasis"> dans MadCap Flare. Pour l’utiliser, sauvegardez-le sous le nom de emphasis.xsl dans le chemin d’accès à vos fichiers, puis, à partir de la ligne de commande, entrez:\N- saxon -it:xsl. saxon -it:main -xsl:emphasis.xsl.

<?xml version="1.0" encoding="UTF-8"?>

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>

<xsl:template match="b">
<xsl:element name="span">
<xsl:attribute name="class">Emphasis</xsl:attribute>
<xsl:value-of select="@*|node()"/>
</xsl:element>
</xsl:template>

<xsl:template match="@class\[.='BodyWord'\]">
<xsl:attribute name="class">Emphasis</xsl:attribute>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>

<xsl:template name="main">
<xsl:for-each select="collection('.?select=*.htm;recurse=yes')">
<xsl:result-document href="output/{tokenize(document-uri(.))}">
<xsl:apply-templates select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>

</xsl:transform>

Et voici un exemple un peu plus complexe qui convertit le contenu des titres (<h1>) en phrases dans MadCap Flare. Pour l’utiliser, sauvegardez-le sous le nom de sentence.xsl dans le chemin de vos fichiers, puis, à partir de la ligne de commande, entrez:
saxon -it:main -xsl:sentence.xsl.

<?xml version="1.0" encoding="UTF-8"?>

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>

<xsl:template match="h1">
<xsl:element name="h1">
<xsl:value-of select="substring(upper-case(.),1,1)"/>
<xsl:value-of select="substring(lower-case(.),2)"/>
</xsl:element>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>

<xsl:template name="main">
<xsl:for-each select="collection('.?select=*.htm;recurse=yes')">
<xsl:result-document href="output/{tokenize(document-uri(.))}">
<xsl:apply-templates select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>

</xsl:transform>

Vous pouvez en savoir plus sur XSLT à l’adresse suivante w3schools.com.