[XSLT] Number dans un for-each
Bonjour,
Je souhaite transformer un fichier XML de ce genre :
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
| <?xml version="1.0"?>
<SO version="" id="">
<ListOfPKT>
<PKT>
<TableIndicator>1</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200601177046</OrderNumber>
<OrderLogisticTYpe>7</OrderLogisticTYpe>
<StoreNumber>0000000001</StoreNumber>
<PlannedDeliveryDate>20060627</PlannedDeliveryDate>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<MemoField/>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<CommercialSupplierNumber>0000000892</CommercialSupplierNumber>
<PlannedDeliveryDateWarehouse>20060626</PlannedDeliveryDateWarehouse>
<OrderDate>20060626</OrderDate>
<FreeText1/>
<FreeText2/>
<OrderLogisticFlowType>07</OrderLogisticFlowType>
</PKT>
<PKT>
<TableIndicator>1</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200601177060</OrderNumber>
<OrderLogisticTYpe>7</OrderLogisticTYpe>
<StoreNumber>0000000001</StoreNumber>
<PlannedDeliveryDate>20060627</PlannedDeliveryDate>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<MemoField/>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<CommercialSupplierNumber>0000000892</CommercialSupplierNumber>
<PlannedDeliveryDateWarehouse>20060626</PlannedDeliveryDateWarehouse>
<OrderDate>20060626</OrderDate>
<FreeText1/>
<FreeText2/>
<OrderLogisticFlowType>07</OrderLogisticFlowType>
</PKT>
<PKT>
<TableIndicator>1</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<OrderLogisticTYpe>9</OrderLogisticTYpe>
<StoreNumber>0000000003</StoreNumber>
<PlannedDeliveryDate>20060703</PlannedDeliveryDate>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<MemoField/>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<CommercialSupplierNumber>0000000892</CommercialSupplierNumber>
<PlannedDeliveryDateWarehouse>20060703</PlannedDeliveryDateWarehouse>
<OrderDate>20060703</OrderDate>
<FreeText1/>
<FreeText2/>
<OrderLogisticFlowType>09</OrderLogisticFlowType>
</PKT>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200601177046</OrderNumber>
<StoreNumber>0000000001</StoreNumber>
<ArticleNumber>0000002912</ArticleNumber>
<OrderQuantity>0000024000</OrderQuantity>
<DateRecord>20060626</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200601177046</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200601177060</OrderNumber>
<StoreNumber>0000000001</StoreNumber>
<ArticleNumber>0000002913</ArticleNumber>
<OrderQuantity>0000036000</OrderQuantity>
<DateRecord>20060626</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200601177060</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000048430</ArticleNumber>
<OrderQuantity>0000015000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000048430</ArticleNumber>
<OrderQuantity>0000015000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000048430</ArticleNumber>
<OrderQuantity>0000015000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000048430</ArticleNumber>
<OrderQuantity>0000015000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000264393</ArticleNumber>
<OrderQuantity>0000016000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000264393</ArticleNumber>
<OrderQuantity>0000016000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000264393</ArticleNumber>
<OrderQuantity>0000016000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
<PKTDetails>
<TableIndicator>2</TableIndicator>
<LSP>FDL</LSP>
<OrderNumber>00000000200603184070</OrderNumber>
<StoreNumber>0000000003</StoreNumber>
<ArticleNumber>0000264393</ArticleNumber>
<OrderQuantity>0000016000</OrderQuantity>
<DateRecord>20060704</DateRecord>
<ActionType>I</ActionType>
<WarehouseNumber>00000000000000000097</WarehouseNumber>
<FreeText1/>
<PurchaseOrderNumber>00000000200603184070</PurchaseOrderNumber>
</PKTDetails>
</ListOfPKT>
</SO> |
via une transformation 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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:import href="communs.xsl"/>
<xsl:import href="PKMS.xsl"/>
<xsl:output method="xml" encoding="ISO-8859-1" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="/">
<xsl:call-template name="listPkt"/>
</xsl:template>
<xsl:template name="listPkt">
<xsl:element name="Pickticket_1_5">
<!--Code client METRO : A DEFINIR-->
<xsl:element name="GraCptNumEx">METRO001</xsl:element>
<xsl:for-each select="//PKT">
<xsl:element name="Pickticket">
<xsl:element name="PktCtlNbr">
<xsl:value-of select="substring(OrderNumber,string-length(OrderNumber)-9,10)"/>
</xsl:element>
<xsl:element name="PktNbr">
<xsl:attribute name="PktSuffix"><xsl:value-of select="substring(OrderNumber,1,2)"/></xsl:attribute>
<xsl:value-of select="substring(OrderNumber,string-length(OrderNumber)-9,10)"/>
</xsl:element>
<xsl:element name="OrderNbr">
<xsl:attribute name="OrderSuffix"><xsl:value-of select="OrderLogisticFlowType"/></xsl:attribute>
<xsl:value-of select="substring(OrderNumber,string-length(OrderNumber)-5,6)"/>
</xsl:element>
<xsl:element name="PickTicketHeaderFields">
<xsl:element name="ShipTo">
<xsl:value-of select="StoreNumber"/>
</xsl:element>
<xsl:element name="VendorNbr">
<xsl:value-of select="CommercialSupplierNumber"/>
</xsl:element>
<xsl:element name="ManagingTerritory">
<xsl:value-of select="substring(OrderNumber,1,2)"/>
</xsl:element>
<xsl:element name="OrderDate">
<xsl:value-of>
<xsl:call-template name="Convert_Date_AAAAMMJJ_vers_Date_PKMS">
<xsl:with-param name="Date">
<xsl:value-of select="OrderDate"/>
</xsl:with-param>
</xsl:call-template>
</xsl:value-of>
</xsl:element>
<xsl:element name="PktGenerationDate">
<xsl:call-template name="Date_PKMS"/>
</xsl:element>
<xsl:element name="ScheduleDeliveryDate">
<xsl:value-of select="PlannedDeliveryDate"/>
</xsl:element>
<xsl:element name="PickticketType">
<xsl:value-of select="OrderLogisticFlowType"/>
</xsl:element>
<xsl:element name="CollectFreight">A</xsl:element>
<xsl:element name="DesigModeCode">A</xsl:element>
</xsl:element>
<xsl:element name="OMSupplPktHdr">
<xsl:element name="ShipToCnty">
<xsl:value-of select="StoreNumber"/>
</xsl:element>
</xsl:element>
<xsl:element name="ListOfPickticketDetails">
<xsl:element name="PickticketDetail">
<xsl:for-each select="//PKTDetails[./OrderNumber=current()/OrderNumber]">
<xsl:element name="PktLineNbr">
<xsl:number/>
</xsl:element>
<xsl:element name="articlenumber">
<xsl:value-of select="./ArticleNumber"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet> |
Pour obtenir un nouveau fichier XML de ce genre :
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <?xml version="1.0" encoding="ISO-8859-1"?>
<Pickticket_1_5>
<GraCptNumEx>METRO001</GraCptNumEx>
<Pickticket>
<PktCtlNbr>0601177046</PktCtlNbr>
<PktNbr PktSuffix="00">0601177046</PktNbr>
<OrderNbr OrderSuffix="07">177046</OrderNbr>
<PickTicketHeaderFields>
<ShipTo>0000000001</ShipTo>
<VendorNbr>0000000892</VendorNbr>
<ManagingTerritory>00</ManagingTerritory>
<OrderDate>2006-06-26T00:00:00+01:00</OrderDate>
<PktGenerationDate>2006-08-18T11:55:14+01:00</PktGenerationDate>
<ScheduleDeliveryDate>20060627</ScheduleDeliveryDate>
<PickticketType>07</PickticketType>
<CollectFreight>A</CollectFreight>
<DesigModeCode>A</DesigModeCode>
</PickTicketHeaderFields>
<OMSupplPktHdr>
<ShipToCnty>0000000001</ShipToCnty>
</OMSupplPktHdr>
<ListOfPickticketDetails>
<PickticketDetail>
<PktLineNbr>1</PktLineNbr>
<articlenumber>0000002912</articlenumber>
</PickticketDetail>
</ListOfPickticketDetails>
</Pickticket>
<Pickticket>
<PktCtlNbr>0601177060</PktCtlNbr>
<PktNbr PktSuffix="00">0601177060</PktNbr>
<OrderNbr OrderSuffix="07">177060</OrderNbr>
<PickTicketHeaderFields>
<ShipTo>0000000001</ShipTo>
<VendorNbr>0000000892</VendorNbr>
<ManagingTerritory>00</ManagingTerritory>
<OrderDate>2006-06-26T00:00:00+01:00</OrderDate>
<PktGenerationDate>2006-08-18T11:55:14+01:00</PktGenerationDate>
<ScheduleDeliveryDate>20060627</ScheduleDeliveryDate>
<PickticketType>07</PickticketType>
<CollectFreight>A</CollectFreight>
<DesigModeCode>A</DesigModeCode>
</PickTicketHeaderFields>
<OMSupplPktHdr>
<ShipToCnty>0000000001</ShipToCnty>
</OMSupplPktHdr>
<ListOfPickticketDetails>
<PickticketDetail>
<PktLineNbr>2</PktLineNbr>
<articlenumber>0000002913</articlenumber>
</PickticketDetail>
</ListOfPickticketDetails>
</Pickticket>
<Pickticket>
<PktCtlNbr>0603184070</PktCtlNbr>
<PktNbr PktSuffix="00">0603184070</PktNbr>
<OrderNbr OrderSuffix="09">184070</OrderNbr>
<PickTicketHeaderFields>
<ShipTo>0000000003</ShipTo>
<VendorNbr>0000000892</VendorNbr>
<ManagingTerritory>00</ManagingTerritory>
<OrderDate>2006-07-03T00:00:00+01:00</OrderDate>
<PktGenerationDate>2006-08-18T11:55:14+01:00</PktGenerationDate>
<ScheduleDeliveryDate>20060703</ScheduleDeliveryDate>
<PickticketType>09</PickticketType>
<CollectFreight>A</CollectFreight>
<DesigModeCode>A</DesigModeCode>
</PickTicketHeaderFields>
<OMSupplPktHdr>
<ShipToCnty>0000000003</ShipToCnty>
</OMSupplPktHdr>
<ListOfPickticketDetails>
<PickticketDetail>
<PktLineNbr>3</PktLineNbr>
<articlenumber>0000048430</articlenumber>
<PktLineNbr>4</PktLineNbr>
<articlenumber>0000048430</articlenumber>
<PktLineNbr>5</PktLineNbr>
<articlenumber>0000048430</articlenumber>
<PktLineNbr>6</PktLineNbr>
<articlenumber>0000048430</articlenumber>
<PktLineNbr>7</PktLineNbr>
<articlenumber>0000264393</articlenumber>
<PktLineNbr>8</PktLineNbr>
<articlenumber>0000264393</articlenumber>
<PktLineNbr>9</PktLineNbr>
<articlenumber>0000264393</articlenumber>
<PktLineNbr>10</PktLineNbr>
<articlenumber>0000264393</articlenumber>
</PickticketDetail>
</ListOfPickticketDetails>
</Pickticket>
</Pickticket_1_5> |
Mon problème est dans le tag <PktLineNbr>.
En fait je voudrais commencer une nouvelle numérotation à chaque nouveau tag père <Pickticket> mais je n'y arrive pas.
Est-ce que quelqu'un aurait une idée ?