Bonjour à tous,
J'ai un petit problème que je n'arrive pas à résoudre, même en passant par la FAQ XML et le site ZVON.
Je voudrais, à partir d'un fichier XML, récupérer le texte encodé avec les éléments
et les trier dans un autre fichier XML en fonction la valeur de @sortKey afin de générer un index dans lequel une entrée est créée pour chaque valeur identique de @sortKey, puis d'y intégrer en tant qu'enfants chaque occurence du lieu recensé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <index indexName="Lieux"> <term sortKey=""></term> </index>
J'ai réussi à trier les éléments avec <xsl:key> mais le problème est que j'ai des doublons que je voudrais supprimer.
Extrait du code XML source:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 <div type="copie" xml:id="copy1"> <p> <index indexName="Lieux"> <term sortKey="Landrecy">landrecy</term> </index> <index indexName="Lieux"> <term sortKey="Nice">Nice</term> </index> </p> </div> <div type="copie" xml:id="copy3"> <p> <index indexName="Lieux"> <term sortKey="Cancaus">cancaus</term> </index> </p> </div> <div type="copie" xml:id="copy4"> <p> <index indexName="Lieux"> <term sortKey="Landrecy">landrecy</term> </index> <index indexName="Lieux"> <term sortKey="Laon">laon</term> </index> <index indexName="Lieux"> <term sortKey="Rome">Rome</term> </index> </p> </div> <div type="copie" xml:id="copy5"> <p> <index indexName="Lieux"> <term sortKey="inconnu">abaye</term> </index> </p> </div> <div type="copie" xml:id="copy7"> <p> <index indexName="Lieux"> <term sortKey="Lyon">lion</term> </index> <index indexName="Lieux"> <term sortKey="abbaye_de_St_Pierre">St Pierre</term> </index> </p> </div> <div type="copie" xml:id="copy8"> <p> <index indexName="Lieux"> <term sortKey="Lyon">lion</term> </index> </p> </div> <div type="copie" xml:id="copy10"> <p><index indexName="Lieux"> <term sortKey="Paris">Paris</term> </index> <index indexName="Lieux"> <term sortKey="inconnu">abaie</term> </index> </p> </div>
Code XML généré
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" version="1.0"> <xsl:output method="xml" indent="yes" encoding="UTF-8"/> <xsl:key name="lieuxId" match="tei:term[parent::tei:index[@indexName='Lieux']]" use="@sortKey"/> <xsl:template match="/"> <TEI> <text> <body> <div> <p> <xsl:for-each select="descendant::tei:index[@indexName='Lieux']"> <index indexName="{tei:term/@sortKey}"> <xsl:apply-templates select="key('lieuxId',tei:term/@sortKey)"/> </index> </xsl:for-each> </p> </div> </body> </text> </TEI> </xsl:template> <xsl:template match="tei:index[@indexName='Lieux']/tei:term"> <term> <xsl:attribute name="corresp"> <xsl:value-of select="concat('#',ancestor::tei:text/@xml:id,ancestor::tei:div/@xml:id)"/> </xsl:attribute> <xsl:value-of select="."/> </term> </xsl:template> </xsl:stylesheet>
Comme vous le voyez, j'ai des doublons dont j'aimerais me débarrasser. J'ai essayé avec generate-id(), mais cela n'a rien donné. Ou alors, j'ai fait une erreur toute bête, étant donnée que je suis débutante.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <?xml version="1.0" encoding="UTF-8"?> <TEI xmlns:tei="http://www.tei-c.org/ns/1.0"> <text> <body> <div> <p> <index indexName="Landrecy"> <term corresp="#BMLyonMs1486copy1">landrecy</term> <term corresp="#BMLyonMs1486copy4">landrecy</term> </index> <index indexName="Nice"> <term corresp="#BMLyonMs1486copy1">Nice</term> </index> <index indexName="Cancaus"> <term corresp="#BMLyonMs1486copy3">cancaus</term> </index> <index indexName="Landrecy"> <term corresp="#BMLyonMs1486copy1">landrecy</term> <term corresp="#BMLyonMs1486copy4">landrecy</term> </index> <index indexName="Laon"> <term corresp="#BMLyonMs1486copy4">laon</term> </index> <index indexName="Rome"> <term corresp="#BMLyonMs1486copy4">Rome</term> </index> <index indexName="inconnu"> <term corresp="#BMLyonMs1486copy5">abaye</term> <term corresp="#BMLyonMs1486copy10">abaie</term> </index> <index indexName="Lyon"> <term corresp="#BMLyonMs1486copy7">lion</term> <term corresp="#BMLyonMs1486copy8">lion</term> </index> <index indexName="abbaye_de_St_Pierre"> <term corresp="#BMLyonMs1486copy7">St Pierre</term> </index> <index indexName="Lyon"> <term corresp="#BMLyonMs1486copy7">lion</term> <term corresp="#BMLyonMs1486copy8">lion</term> </index> <index indexName="Paris"> <term corresp="#BMLyonMs1486copy10">Paris</term> </index> <index indexName="inconnu"> <term corresp="#BMLyonMs1486copy5">abaye</term> <term corresp="#BMLyonMs1486copy10">abaie</term> </index> </p> </div> </body> </text> </TEI>
Merci bien de votre aide
Lydie
Partager