Bonjour à tous,

J'ai écrit un code XSLT afin de créer des requêtes SQL permettant de sélectionner les données du fichier que je veux insérer dans une base de données.

Cela fonctionne très bien mais j'ai toutefois un petit problème que je n'arrive pas à régler, certainement à cause de mon chemin XPath mais je ne vois pas où.

En effet, je souhaite récupérer les informations présentes dans tous les éléments <forme_ancienne> présents dans les articles (lorsque cet élément est présent). Le problème, c'est qu'avec mon code je n'obtiens que les informations du premier élément <forme_ancienne>, et pas les suivantes...

Voyez-vous ce qui ne va pas dans mon code ?

Extrait du fichier XML :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DICTIONNAIRE SYSTEM "TOPOGR.DTD">
 
<DICTIONNAIRE departement="Aisne" dep="02">
 
<article id="10" pg="1">
<vedette><sm>Abbeville,</sm></vedette>
<definition><typologie>ferme</typologie>, <localisation>commune de Fontaine-Notre-Dame</localisation>.</definition>
<forme_ancienne><i>Abbatis villa,</i> <date>1124</date> <reference>(cart. d’Homblières, p.*6)</reference>.</forme_ancienne>
<forme_ancienne><i>Abeville,</i> <date>1309</date> <reference>(cart. AA de l’abb. de Saint-Quentin-en-l’Île, p.*308)</reference>.</forme_ancienne>
<commentaire><p>Cette ferme, qui appartenait autrefois à l’abbaye d’Homblières, est détruite.</p></commentaire>
</article>
 
<article id="11" pg="1">
<vedette><sm>Abbiette (L’),</sm></vedette>
<definition><typologie>petit hameau</typologie>, <localisation>commune de Gauchy</localisation>.</definition>
<forme_ancienne>— Villa que dicitur <i>Vetus-Villa</i> prope Sanctum-Quintinum, <date>1216</date>*;</forme_ancienne>
<forme_ancienne><i>Vieville,</i> <date>1313</date> <reference>(cart. AB de l’abb. de Saint-Quentin-en-l’Île, p.*136 et 138)</reference>.</forme_ancienne>
<forme_ancienne>— Terroir de <i>Viesville,</i> <date>1313</date> <reference>(cart. de l’abb. de Saint-Quentin-en-l’Île, arch. de l’Emp. LL 1016)</reference>.</forme_ancienne>
<forme_ancienne><i>Viefville-emprès-Saint-Quentin, Vielzville-dales-Saint-Quentin,</i> <date>1384</date> <pg>2</pg><reference>(transcrits de Vermandois, P. 135, f°*255, arch. de l’Emp.)</reference>.</forme_ancienne>
<forme_ancienne><i>Viefville lez-Saint-Quentin,</i> <date>1610</date>*;</forme_ancienne>
<forme_ancienne><i>Labiette,</i> <date>1624</date> <reference>(titres de l’abb. de Saint-Quentin-en-l’Île)</reference>.</forme_ancienne>
<forme_ancienne><i>Abiette</i> <reference>(carte de Cassini)</reference>.</forme_ancienne>
<commentaire><p>Domaine de l’abb. de Saint-Quentin-en-l’Île, relevant autrefois de Gauchy.</p></commentaire>
</article>
 
<article id="12" pg="2">
<vedette><sm>Abia,</sm></vedette>
<definition><typologie>maison isolée</typologie>, <localisation>commune de Chevregny</localisation>.</definition>
</article>
 
</DICTIONNAIRE>
Code XSLT :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
    <xsl:output method="text"/>
 
    <xsl:template match="/">
        <xsl:apply-templates select="//article"/>
    </xsl:template>
 
    <xsl:template match="article">
        <xsl:if test="not(contains(article, forme_ancienne))">
            <xsl:text>insert into formesanciennes (id_vedette, dep, forme_ancienne, forme_ancienne_entiere, date_fa, reference_forme_ancienne, renvoi, rech_fa, recherche, rech_ref_fa, rech_date, rech_periode) values('</xsl:text>
            <xsl:value-of select="./@id"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="../@dep"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/i"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/date"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/reference"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/renvoi"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/i"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/reference"/>
            <xsl:text>','</xsl:text>
            <xsl:value-of select="./forme_ancienne/date"/>
            <xsl:text>','');&#xA;</xsl:text>
        </xsl:if>
    </xsl:template>
 
</xsl:stylesheet>
Merci d'avance pour votre aide !