Transformation xsl avec recursif
bonjour,
je viens de réaliser une transformation xsl avec un récursif me permettant d'ajouter des variables issues d'un xml entre elles.
Mon problème, c'est que je veux intégrer les résultats du récursif dans mon document xml sans tout mettre dans le récursif, car dés que je veux intégrer des nouvelles balises, le récursif s'applique sur toutes.
J'essaie d'être le plus clair possible, voici mon xml et mon xsl, le résultat obtenu et le résultat voulu:
Code:
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
| <?xml version="1.0" encoding="utf-8"?>
<ListeDiffusion Titre="" Version="10">
<Clip>
<SourceVideo Name="Source1">
<Fichier>\videoa.avi</Fichier>
</SourceVideo>
<SourcePrincipale>1</SourcePrincipale>
<Debut>1403.59</Debut>
<Fin>1409.26</Fin>
<Commentaire>bibi</Commentaire>
</Clip>
..........
<Clip>
<SourceVideo Name="Source1">
<Fichier>\videob.avi</Fichier>
</SourceVideo>
<SourcePrincipale>1</SourcePrincipale>
<Debut>5929</Debut>
<Fin>5937.02</Fin>
<Commentaire>bobo</Commentaire>
</Clip>
</ListeDiffusion> |
xsl:
Code:
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
| <!-- DWXMLSource="testlll.xml" --><xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
method="xml" indent="yes" encoding="UTF-8" />
<xsl:template name="boucle" match="/ListeDiffusion" >
<!-- liste des paramètres -->
<xsl:param name="n" select="count(/ListeDiffusion/Clip/Debut)"></xsl:param>
<xsl:param name="indice" select="0"></xsl:param>
<xsl:param name="somme_duree" select="0"></xsl:param>
<!-- On teste si lindice est supérieur à la limite -->
<xsl:choose>
<xsl:when test="$indice=0">
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">
</playlist>
<xsl:call-template name="boucle">
<xsl:with-param name="indice"><xsl:value-of select="$indice+1"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="$indice > $n">
<!-- instruction à réaliser après la boucle-->
</xsl:when>
<!-- si lindice est inférieur ou égale à n -->
<xsl:otherwise>
<track>
<location><xsl:value-of select="concat('file:///F:\rugby\saison 2012 2013',Clip/SourceVideo/Fichier)"/></location>
<title><xsl:apply-templates select="Clip[position()=$indice]/Commentaire"/></title>
<extension application="http://www.videolan.org/vlc/playlist/0">
<xsl:element name="vlc">
<xsl:value-of select="concat('start-time=',$somme_duree)"/>
</xsl:element>
</extension>
</track>
<xsl:call-template name= "boucle">
<xsl:with-param name="indice"><xsl:value-of select="$indice+1"/>
<xsl:with-param name="somme_duree" select="number(/ListeDiffusion/Clip[position()=$indice]/Fin)-number(/ListeDiffusion/Clip[position()=$indice]/Debut)+$somme_duree"></xsl:with-param>
</xsl:with-param>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> |
résultat obtenu xml:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1"/>
<track>
<location>file:///F:\videoa.avi</location>
<title>bibi</title>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc>start-time=0</vlc>
</extension>
</track>
..........
<track>
<location>file:///F:\videoa.avi</location>
<title>bobo</title>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc>start-time=46.15000000000009</vlc>
</extension>
</track> |
xml voulu:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<trackList>
<track>
<location>file:///F:\videoa.avi</location>
<title>bibi</title>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:option>start-time=0</vlc:option>
</extension>
</track>
........
<track>
<location>file:///F:\videoa.avi</location>
<title>bobo</title>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:option>start-time=46.15000000000009</vlc:option>
</extension>
</track>
</tracklist> |
pourriez vous m'aider?
créer les balises père du récursif
en fait j ai certainement fait une erreur d'écriture, mais pour arriver au résulat
Code:
1 2 3 4
|
<A>
résultat récursif
</A> |
il fallait faire
Code:
1 2 3 4 5 6 7 8 9 10
|
<xsl:template match="/">
<A>
<xsl:call-template name="nom du récursif"/>
</A>
</xsl:template>
<xsl:template name="nom du récursif">
...
</xsl:template> |
A nouveau Probleme récursif
bonjour,
tout marchait bien mais j'ai du modifié quelquechose sans faire exprès et mon code est tout décalé, pourriez vous m'aider?
voici xml source:
Code:
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
| <?xml version="1.0" encoding="utf-8"?>
<ListeDiffusion Titre="" Version="11">
<Clip>
<Libelle>24/1 SMR : Seq Touche - CPP Obtenue</Libelle>
<Evenement>Séquence de jeu</Evenement>
<Ordre>24</Ordre>
<Couleur>-16777216</Couleur>
<SourceVideo Name="Source1">
<Fichier>\2013-09-1-J01-MDM-LAR-mt1.avi</Fichier>
<Decalage>200</Decalage>
</SourceVideo>
<SourceVideo Name="Source2">
<Fichier>\2013-09-1-J01-MDM-LAR-mt1-large.AVI</Fichier>
<Decalage>29.1</Decalage>
</SourceVideo>
<SourcePrincipale>1</SourcePrincipale>
<Debut>1517</Debut>
<Fin>1553</Fin>
<NoteAction>1</NoteAction>
<MiTemps>1</MiTemps>
<Equipe1>SMR</Equipe1>
<Equipe2>ROC</Equipe2>
<NomEquipe>SMR</NomEquipe>
<typeFinAction>1553</typeFinAction>
<Commentaire>SMR------</Commentaire>
<DebutAction>1513</DebutAction>
<FinAction>1553</FinAction>
<TCarbitre>1431</TCarbitre>
<Score1>9</Score1>
<Score2>6</Score2>
<Origine>Touche</Origine>
</Clip>
<Clip>
<Libelle>5/2 SMR : Seq Touche - Marque</Libelle>
<Evenement>Séquence de jeu</Evenement>
<Ordre>5</Ordre>
<Couleur>-16777216</Couleur>
<SourceVideo Name="Source1">
<Fichier>\2013-09-1-J01-MDM-LAR-mt2.avi</Fichier>
<Decalage>241.89</Decalage>
</SourceVideo>
<SourceVideo Name="Source2">
<Fichier>\2013-09-1-J01-MDM-LAR-mt2-large.AVI</Fichier>
<Decalage>3.94</Decalage>
</SourceVideo>
<SourcePrincipale>1</SourcePrincipale>
<Debut>285.27</Debut>
<Fin>318.06</Fin>
<MiTemps>2</MiTemps>
<Equipe1>SMR</Equipe1>
<Equipe2>ROC</Equipe2>
<NomEquipe>SMR</NomEquipe>
<typeFinAction>318.06</typeFinAction>
<Commentaire>SMR------</Commentaire>
<DebutAction>285.27</DebutAction>
<FinAction>318.06</FinAction>
<TCarbitre>2685.27</TCarbitre>
<Score1>20</Score1>
<Score2>19</Score2>
<Origine>Touche</Origine>
</Clip>
</ListeDiffusion> |
le xsl:
Code:
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
| <!-- DWXMLSource="../../../Desktop/test/lancements chrono.ldts" --><xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<xsl:template name="rafa"><title><xsl:value-of select="/ListeDiffusion/Clip[$index]/Libelle"/></title>
<xsl:param name="index" select="1"/>
<xsl:param name="start" select="0"/>
<xsl:variable name="clip" select="(//clip)[$index]"/>
<location><xsl:text>file:///C:\Users\SASP SM Rugby pro\Desktop\videotest.avi</xsl:text></location>
<xsl:value-of select="concat('start-time=', $start)"/>
<xsl:if test="$index < count(/ListeDiffusion/Clip)">
<xsl:variable name="length" select="ListeDiffusion/Clip[$index]/Fin - ListeDiffusion/Clip[$index]/Debut"/>
<xsl:call-template name="rafa">
<xsl:with-param name="index" select="$index + 1"/>
<xsl:with-param name="start" select="$start + $length"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet> |
et tout est décalé, je ne comprends pas