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 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 <?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. dHomblières, p.*6)</reference>.</forme_ancienne> <forme_ancienne> <i>Abeville,</i> <date>1309</date> <reference>(cart. AA de labb. de Saint-Quentin-en-lÎle, p.*308)</reference>.</forme_ancienne> <commentaire><p>Cette ferme, qui appartenait autrefois à labbaye dHombliè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 labb. 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 labb. de Saint-Quentin-en-lÎle, arch. de lEmp. 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 lEmp.)</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 labb. 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 labb. 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>
Merci d'avance pour votre aide !
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>','');
</xsl:text> </xsl:if> </xsl:template> </xsl:stylesheet>![]()
Partager