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