Bonjour à tous et désolé pour mon titre peu explicite

J'aimerai votre aide car je débute avec xsl et j'ai beaucoup de mal à faire ce que je veux
J'ai un fichier xml de cette forme :

<exist:result>
	<projs>
		<proj>
			<id-pf>id1</id-pf>
			<nom-pf>projet1</nom-pf>
                        <prog>Programme</prog>
		</proj>
		<proj>
			<id-pf>id2</id-pf>
			<nom-pf>projet2</nom-pf>
                        <prog>Programme</prog>
		</proj>
	</projs>
</exist:result>


j'ai un second fichier de cette forme :

<projets>
    <projet>
        <pf-code>id1</pf-code>
        <tache-name/>
        <raf>3</raf>
    </projet>
    <projet>
        <pf-code>id1</pf-code>
        <tache-name>Codage</tache-name>
        <raf>9</raf>
    </projet>
    <projet>
        <pf-code>id1</pf-code>
        <tache-name>Codage</tache-name>
        <raf>3</raf>
    </projet>
    <projet>
        <pf-code>id1</pf-code>
        <tache-name>Test</tache-name>
        <raf>361.25</raf>
    </projet>
    <projet>
        <pf-code>id2</pf-code>
        <tache-name>Intégration</tache-name>
        <raf>22</raf>
    </projet>
    <projet>
        <pf-code>id3</pf-code>
        <tache-name>Intégration</tache-name>
        <raf>22</raf>
    </projet>
</projets>



Je cherche à obtenir la somme des raf pour chaque pf-code différent par tache-name ayant des pf-code = id-pf présent dans le premier fichier
Ainsi en résultat, j'aurai ce genre de code :

<prog name="Programme">
	<pf code="id1">
		<tache name="Codage">
			<raf>12</raf>
		</tache>
		<tache name="Test">
			<raf>361.25</raf>
		</tache>
		
	</pf>
	<pf code="id2">
		<tache name="Intégration">
			<raf>22</raf>
		</tache>
	</pf>
</prog>


et voici mon code actuel (qui ne fonctionne pas)
<prog>
	<xsl:attribute name="name">
		<xsl:value-of select="distinct-values($instance/exist:result/projs/proj/prog)"/>
	</xsl:attribute>
			
	<xsl:for-each select="$instance/exist:result/projs/proj[id-pf = projets/projet/pf-code]">
		<pf>
			<xsl:attribute name="code">
				<xsl:value-of select="projets/projet/pf-code"/>
			</xsl:attribute>
                </pf>			
	</xsl:for-each>
</prog>


La première partie fonctionne (j'ai bien le nom du programme) mais les balises pf n'apparaissent pas
Modifié par Zel0 (31 May 2010 - 16:01)
Hi,

Je n’ai pas regardé le détail, mais dans l’immédiat, je constate deux choses dans ton XSLT :

Tu utilise une variable dans un chemin. Ça ne fonctionne normalement pas sans un certain support externe : ce sont des chemins dynamiques.

T’es-tu bien assuré que ton processeur XSLT supporte les chemins dynamiques ?

Ensuite, on ne voit pas quelle est la valeur assignée à la variable $instance. Il manque un petit bout peut-être à ton extrait pour qu’il puisse correctement étudié.

En tous les cas, si tu ne retrouve aucun élément « pf » dans le résultat en sortie, c’est que ton expression « $instance/exist:result/projs/proj[id-pf = projets/projet/pf-code] » n’est jamais vérifiée.

Juste une petite remarque annexe également, au sujet de la conception : pourquoi les éléments « id-pf » et « pf-code » n’ont-ils pas le même nom s’ils correspondent à la même chose ? Mal nommer les choses, c’est le début des grands désastres Smiley cligne
Modifié par hibou57 (27 Jun 2010 - 01:15)