Bonjour

Dans mon XML il peut y avoir plusieurs fois la donnée garantie / entité / personne qui contiennent plusieurs valeurs.

Code JSON : 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
  "sinistre":{
         "codePays":"FRA",
		 "description":"le sinistre a été ouvert",
         "codeAuto":"N",
         "garantie":[ {
            "codeGarantie":"REC",
            "typeDommage":"M",
            "nombreVehiculeTiers":"1",
            "nombreTiers":"A"
         },{
            "codeGarantie":"REC",
            "typeDommage":"M",
            "nombreVehiculeTiers":"1",
            "nombreTiers":"A"
         }
         ]
      },


Ci-dessous mon XSL j'ai réussi à mettre en place la prise en compte de plusieurs garanties possibles mais j'ai un problème de transformation

XSL :
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
                                   <!-- Object or Element Property-->
                                   <xsl:template match="*">"<xsl:value-of select="name()"/>":<xsl:call-template name="Properties"/></xsl:template>
 
                                   <!-- Array Element -->
                                   <xsl:template match="*" mode="ArrayElement"><xsl:call-template name="Properties"/></xsl:template>
 
                                   <!-- Object Properties -->
                                   <xsl:template name="Properties">
                                               <xsl:variable name="childName" select="name(*[1])"/>
                                               <xsl:choose>
                                                           <xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
                                                           <xsl:when test="count(*[name()=$childName]) > 1">{"<xsl:value-of select="$childName"/>":[<xsl:apply-templates select="*" mode="ArrayElement"/>]}</xsl:when>
                                                           <xsl:when test="(name() = 'garantie' or name() = 'entite' or name() = 'personne')and count(*[name()=$childName]) = 1">[{<xsl:apply-templates select="@*"/><xsl:apply-templates select="*"/>}]</xsl:when>
                                                           <xsl:otherwise>{<xsl:apply-templates select="@*"/><xsl:apply-templates select="*"/>}</xsl:otherwise>
                                               </xsl:choose>
                                               <xsl:if test="following-sibling::*">,</xsl:if>
                                   </xsl:template>
 
                                   <!-- Attribute Property -->
                                   <xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",</xsl:template>
</xsl:stylesheet>




Transformation souhaitée :
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
"garantie":[{"codeGarantie":"REC","typeDommage":"M","nombreVehiculeTiers":"1","nombreTiers":"A"},
{"codeGarantie":"REC","typeDommage":"C","nombreVehiculeTiers":"1","nombreTiers":"13"},{"codeGarantie":"DOT","typeDommage":"M","nombreVehiculeTiers":"0","nombreTiers":"13"}]},


Transformation que j'ai

Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
"garantie":[{"codeGarantie":"INC","typeDommage":"M","nombreVehiculeTiers":"0","nombreTiers":"0"}],
"garantie":[{"codeGarantie":"TES","typeDommage":"M","nombreVehiculeTiers":"1","nombreTiers":"1"}]},

le nom "garantie" revient à chaque fois ... alors que j'aimerais juste avoir },{ entre les 2 garanties avec uniquement les infos contenues dans Garantie


Merci pour votre aide, je débute