Le but est ici de produire un document CSV contenant certaines informations
d’un document elements.xml
et d’autres informations correspondantes provenant
d’un autre document informations.xml
.
Il s’agit d'écrire le transformateur elem2csv.xsl
qui travaille sur
elements.xml
,
le fichier informations.xml
étant consulté en interne comme on va le voir.
La commande pour faire la transformation va donc être :
$ xmlstarlet transform elem2csv.xsl elements.xml > elements.csv
Le fichier .xsl
se présente de la façon suivante :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<!-- Traitement de la racine -->
...
<!-- Traitement des éléments -->
...
</xsl:stylesheet>
Dans le traitement de la racine, on affiche la ligne de titre du .csv
et on appelle le traitement des éléments :
<xsl:template match="/">
<xsl:text>ID ; Name ; Status
</xsl:text>
<xsl:apply-templates select="//Element" />
</xsl:template>
Puis, pour chaque élément, on affiche ID
et Name
,
et on recherche ID
dans le fichier d’information.
<xsl:template match="Element">
<xsl:variable name="id" select="@ID" />
<xsl:value-of select="@ID"/> ; <xsl:value-of select="@Name"/>
<xsl:text>;</xsl:text>
<xsl:variable name="status"
select="document('informations.xml')//Info[@REF = $id]/@Status"/>
<xsl:choose>
<xsl:when test="$status">
<xsl:value-of select="$status" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'Inconnu'" />
</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
</xsl:template>
On voit qu’on définit une variable status
qui prend la valeur
de l’attribut Status
du noeud Info
ayant pour attribut REF
l’identifiant ID
de l'élément traité dans le fichier informations.xml
.
Enfin, on affiche la valeur trouvée s’il y en a une,
et Inconnu
sinon.
Voir aussi :
- Perl pour lire un fichier csv
- Ocaml pour lire un fichier XML
- XML : validation, transformations, etc.
- Docbook : pour produire de la documentation technique
- Sqlite en ligne de commande
- Perl pour faire des scripts efficaces
- Au sujet des tableurs
- Bash : pour écrire des scripts
- Filtrage de texte : sed, awk, etc.
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit