Bonjour à tous !
J'ouvre une discussion dans l'espoir que quelqu'un puisse me guider dans la génération d'un fichier xslt.
Je dois modifier un fichier xslt afin d'obtenir un résultat
Voici mon fichier xml d'entrée :
Voici le fichier xml de sortie que je dois générer grâce au 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
64
65 <?xml version="1.0" encoding="utf-8"?> <OrderProgressStatus> <SessionContext> <PropertyBagV2> <Item Name="LabelWithContainer"> <ValueList> <Value>401717371/L1709347</Value> <Value>401717372/L1709349</Value> <Value>401717373/L1709350</Value> </ValueList> </Item> <Item Name="PIPackagingType"> <ValueList> <Value>UC/L1709347</Value> <Value>UC/L1709349</Value> <Value>UM/L1709350</Value> </ValueList> </Item> <Item Name="MainPackagingkMaterial"> <ValueList> <Value>C13/L1709347</Value> <Value>C14/L1709349</Value> <Value>PALGEN/L1709350</Value> </ValueList> </Item> <Item Name="PalletContainer"> <ValueList> <Value>L1709350/PALGEN</Value> </ValueList> </Item> </PropertyBagV2> </SessionContext> <PackingConfirmation> <OrderDetail> <PackingContainer> <PackingMaterial> <PackingProductNo>C13</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C40</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C9</PackingProductNo> <PackingQuantity>4.0000000000</PackingQuantity> </PackingMaterial> </PackingContainer> <PackingContainer> <PackingMaterial> <PackingProductNo>C13</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C40</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C9</PackingProductNo> <PackingQuantity>4.0000000000</PackingQuantity> </PackingMaterial> </PackingContainer> </OrderDetail> </PackingConfirmation> </OrderProgressStatus>
J'essaye depuis quelques jours de confronter les valeurs
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 <DELVRY03> <IDOC BEGIN="1"> <E1EDL37 SEGMENT="1"> <E1EDL44 SEGMENT="1"> <VELIN>2</VELIN> <VEMNG>1</VEMNG> <MATNR>C40</MATNR> </E1EDL44> <E1EDL44 SEGMENT="1"> <VELIN>2</VELIN> <VEMNG>3</VEMNG> <MATNR>C9</MATNR> </E1EDL44> </E1EDL37> <E1EDL37 SEGMENT="1"> <E1EDL44 SEGMENT="1"> <VELIN>2</VELIN> <VEMNG>1</VEMNG> <MATNR>C40</MATNR> </E1EDL44> <E1EDL44 SEGMENT="1"> <VELIN>2</VELIN> <VEMNG>3</VEMNG> <MATNR>C9</MATNR> </E1EDL44> </E1EDL37> </IDOC> </DELVRY03>
avec les valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <ValueList> <Value>C13/L1709347</Value> <Value>C14/L1709349</Value> <Value>PALGEN/L1709350</Value> </ValueList>
pour que quand : subtring.before(<Value>C13/L1709347</Value>, '/') match avec <PackingProductNo>C13</PackingProductNo> ça ne créé pas de segment <E1EDL44 SEGMENT="1"> dans le fichier xml de sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <PackingMaterial> <PackingProductNo>C13</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C40</PackingProductNo> <PackingQuantity>1.0000000000</PackingQuantity> </PackingMaterial> <PackingMaterial> <PackingProductNo>C9</PackingProductNo> <PackingQuantity>4.0000000000</PackingQuantity> </PackingMaterial>
Voici le fichier xslt sur lequel je travaille :
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 <xsl:for-each select="$var4_FlexNetBusinessRulesDeliveryPackingConfirmation/ns0:OrderDetail"> <xsl:variable name="var25_OrderDetail" select="."/> <xsl:for-each select="$var25_OrderDetail/ns0:PackingContainer"> <xsl:variable name="var25_OrderDetail_PackingContainer_Container" select="."/> <xsl:variable name="var36_result_LengthGreaterThanZero"> <xsl:call-template name="LengthGreaterThanZero"> <xsl:with-param name="Value" select="$var25_OrderDetail_PackingContainer_Container/ns0:Quantity"/> </xsl:call-template> </xsl:variable> <xsl:choose> <xsl:when test="string((('0' != normalize-space($var36_result_LengthGreaterThanZero)) and ('false' != normalize-space($var36_result_LengthGreaterThanZero)))) != 'false'"> <E1EDL37> <xsl:attribute name="SEGMENT"> <xsl:value-of select="'1'"/> </xsl:attribute> <xsl:for-each select="$var25_OrderDetail_PackingContainer_Container/ns0:PackingMaterial/ns0:PackingProductNo"> <xsl:variable name="get_PackingProductNo" select="."/> <E1EDL44><xsl:value-of select="$get_PackingProductNo"/></E1EDL44> <xsl:for-each select="$var2_FlexNetBusinessFacadeCommonOrderProgressStatus/ns0:SessionContext/ns0:PropertyBagV2/ns0:Item/ns0:ValueList/ns0:Value"> <xsl:variable name="var_Value_MainPI" select="."/> <xsl:variable name="var_Value_MainPI_exists"> <xsl:if test="string(boolean(../../@Name)) != 'false'"> <xsl:if test="string(('MainPackagingkMaterial' = string(../../@Name))) != 'false'"> <xsl:value-of select="'1'"/> </xsl:if> </xsl:if> </xsl:variable> <xsl:if test="string(boolean(string($var_Value_MainPI_exists))) != 'false'"> <xsl:variable name="var_Select_PackingProductNo"> <xsl:if test="substring-before($var_Value_MainPI, '/') != $get_PackingProductNo"> <xsl:value-of select="'1'"/> </xsl:if> </xsl:variable> </xsl:if> </xsl:for-each> </xsl:for-each> </E1EDL37> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:for-each>
J'ai réalisé plusieurs tests, et la plupart du temps j'obtiens 3*3 : 9 résultats, ce qui est beaucoup plus que ce que je devrais obtenir (2)
Merci d'avance de votre aide !
Clara
Partager