转换后计算节点值

时间:2013-03-20 19:42:40

标签: xslt

我正在尝试使用deliminator'|'将xml转换为本机平面文件格式。 我坚持使用最后的先例复杂类型。我需要在TotalRec中分配这个计数值。

这是我的XSLT: -

<xsl:stylesheet version="1.0"
                xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
                xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
                xmlns:ns1="http://TargetNamespace.com/WriteGSIASNFile"
                xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/WMStoATG/WMSShipmentConfirmation/ReadWMSShipmentConfirmationFile"
                xmlns:pc="http://xmlns.oracle.com/pcbpel/"
                xmlns:imp1="http://www.manh.com/ILSNET/Interface"
                xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
                xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                xmlns:ora="http://schemas.oracle.com/xpath/extension"
                xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
                xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
                xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
                xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
                xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/file/WMStoRMS/WMSShipmentConfirmation/WriteGSIASNFile"
                xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
                xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
                xmlns:med="http://schemas.oracle.com/mediator/xpath"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
                xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
                xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
                exclude-result-prefixes="xsi xsl tns pc imp1 plt wsdl jca xsd ns1 ns0 xp20 bpws bpel bpm ora socket mhdr oraext dvm hwf med ids xdk xref ldap">
  <xsl:template match="/">
    <xsl:variable name="RecordCount"
                  select="count(/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment/imp1:Containers/imp1:ShippingContainer/imp1:NestedContainers/imp1:ShippingContainer/imp1:ContainerDetails/imp1:ContainerDetail)"/>
    <ns1:ASN-Feed>
      <xsl:for-each select="/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment">
        <xsl:if test='((/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment/imp1:OrderType = "Refill") or (/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment/imp1:OrderType = "Store Order")) and ((/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment/imp1:Warehouse = "8001") and (/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment/imp1:Details/imp1:ShipmentDetail[1]/imp1:UserDef3 != ""))'>
          <xsl:variable name="BolNumAlpha" select="imp1:BolNumAlpha"/>
          <xsl:for-each select="imp1:Containers/imp1:ShippingContainer">
            <xsl:for-each select="imp1:NestedContainers/imp1:ShippingContainer">
              <xsl:variable name="ContainerId" select="imp1:ContainerId"/>
              <xsl:for-each select="imp1:ContainerDetails/imp1:ContainerDetail">
                <xsl:variable name="ErpOrderContLevel" select="imp1:ErpOrder"/>
                <xsl:variable name="ErpOrderLineNumContLevel"
                              select="imp1:ErpOrderLineNum"/>
                <xsl:variable name="Position" select="position()"/>
                <ns1:Header>
                  <ns1:StoreNum>
                    <xsl:text disable-output-escaping="no">763</xsl:text>
                  </ns1:StoreNum>
                  <ns1:ReceivingType>
                    <xsl:text disable-output-escaping="no">A</xsl:text>
                  </ns1:ReceivingType>
                  <ns1:PartnerShipmentNum>
                    <xsl:text disable-output-escaping="no"></xsl:text>
                  </ns1:PartnerShipmentNum>
                  <ns1:OrderDate>
                    <xsl:text disable-output-escaping="no"></xsl:text>
                  </ns1:OrderDate>
                  <ns1:ShipmentReceiptDate>
                    <xsl:value-of select='xp20:format-dateTime(xp20:current-date(),"[Y01]-[M01]-[D01]")'/>
                  </ns1:ShipmentReceiptDate>
                  <ns1:ShipperName>
                    <xsl:text disable-output-escaping="no">001 GARAGE MONTREAL</xsl:text>
                  </ns1:ShipperName>
                  <xsl:for-each select="../../../../../../imp1:Details/imp1:ShipmentDetail">
                    <xsl:variable name="ErpOrderDetailLevel"
                                  select="imp1:ErpOrder"/>
                    <xsl:variable name="ErpOrderLineNumDetailLevel"
                                  select="imp1:ErpOrderLineNum"/>
                    <xsl:variable name="ItemSKU" select="imp1:SKU/imp1:Item"/>
                    <xsl:if test="($ErpOrderDetailLevel = $ErpOrderContLevel) and ($ErpOrderLineNumDetailLevel = $ErpOrderLineNumContLevel)">
                      <ns1:PartnerItemNum>
                        <xsl:value-of select="$ItemSKU"/>
                      </ns1:PartnerItemNum>
                    </xsl:if>
                  </xsl:for-each>
                  <xsl:choose>
                    <xsl:when test="imp1:Quantity">
                      <ns1:QuantityShipped>
                        <xsl:value-of select="number(imp1:Quantity)"/>
                      </ns1:QuantityShipped>
                    </xsl:when>
                    <xsl:otherwise>
                      <ns1:QuantityShipped>
                        <xsl:value-of select="imp1:Quantity"/>
                      </ns1:QuantityShipped>
                    </xsl:otherwise>
                  </xsl:choose>
                  <ns1:ItemCost>
                    <xsl:text disable-output-escaping="no"></xsl:text>
                  </ns1:ItemCost>
                  <ns1:ShippingComments>
                    <xsl:text disable-output-escaping="no"></xsl:text>
                  </ns1:ShippingComments>
                  <ns1:TrailerNumber>
                    <xsl:text disable-output-escaping="no"></xsl:text>
                  </ns1:TrailerNumber>
                  <xsl:choose>
                    <xsl:when test="string-length($Position) > 1.0">
                      <ns1:CartonId>
                        <xsl:value-of select="concat(substring($ContainerId,3.0),$Position)"/>
                      </ns1:CartonId>
                    </xsl:when>
                    <xsl:otherwise>
                      <ns1:CartonId>
                        <xsl:value-of select='concat(substring($ContainerId,3.0),concat("0",position()))'/>
                      </ns1:CartonId>
                    </xsl:otherwise>
                  </xsl:choose>
                  <ns1:ASNNumber>
                    <xsl:value-of select="../../../../../../imp1:BolNumAlpha"/>
                  </ns1:ASNNumber>
                  <ns1:CreateDateTime>
                    <xsl:value-of select='xp20:format-dateTime(xp20:current-dateTime(),"[Y0001]-[M01]-[D01]-[H01].[m01].[s01]")'/>
                  </ns1:CreateDateTime>
                  <ns1:Warehouse>
                    <xsl:text disable-output-escaping="no">235</xsl:text>
                  </ns1:Warehouse>
                </ns1:Header>
              </xsl:for-each>
            </xsl:for-each>
          </xsl:for-each>
        </xsl:if>
      </xsl:for-each>
      <ns1:Trailer>
        <ns1:RecordId>
          <xsl:text disable-output-escaping="no">TRAILER</xsl:text>
        </ns1:RecordId>
        <ns1:TotalRec>
          <xsl:value-of select="$RecordCount + 1.0"/>
        </ns1:TotalRec>
        <ns1:BatchId>
          <xsl:value-of select="/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments/imp1:Shipment[1]/imp1:ShippingLoadNum"/>
        </ns1:BatchId>
      </ns1:Trailer>
    </ns1:ASN-Feed>
  </xsl:template>
</xsl:stylesheet>

这是XML: -

 <WMWROOT xmlns="http://www.manh.com/ILSNET/Interface">
   <WMWDATA>
      <WMFWUpload xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <Date>2013-03-18T16:42:50.0398834-04:00</Date>
         <GroupIndex>1</GroupIndex>
         <Id>e229d320-0c30-4e97-a01f-d4d1ef779303</Id>
         <NumGroups>1</NumGroups>
         <NumRecs>2</NumRecs>
         <Shipments>
            <Shipment>
               <BolNumAlpha>08264940000006126</BolNumAlpha>   
               <Carrier>
                  <Condition>Shipped</Condition>
                </Carrier>  
                  <Customer>
                     <Company>Garage</Company>
                     <Customer>30000</Customer>
                     <CustomerCategories/>
                     <ShipTo>30000</ShipTo>
                  </Customer>
                  <ErpOrder>3000013661</ErpOrder>
                  <OrderType>Refill</OrderType>
                  <Warehouse>8051</Warehouse>
                  <Details>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>2.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>3.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>4.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>5.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>6.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>7.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                        <UserDef1>Y</UserDef1>
                        <UserDef3>30000</UserDef3>
                        <ErpOrder>3000013661</ErpOrder>
                        <ErpOrderLineNum>8.00000</ErpOrderLineNum>
                        <SKU>
                           <Item>3085142</Item>
                        </SKU>
                     </ShipmentDetail>
                     <ShipmentDetail>
                     <UserDef1>Y</UserDef1>
                     <UserDef3>30000</UserDef3>
                     <ErpOrder>3000013661</ErpOrder>
                     <ErpOrderLineNum>9.00000</ErpOrderLineNum>
                     <SKU>
                        <Item>3085142</Item>
                     </SKU>
                     </ShipmentDetail>
                  </Details>
                  <Containers>
                     <ShippingContainer>
                        <ContainerID>0000000000000000000</ContainerID>
                        <ContainerType>
                           <Type>PALLET</Type>
                        </ContainerType>
                        <NestedContainers>
                           <ShippingContainer>
                              <ContainerId>00008264940000019935</ContainerId>
                              <ContainerDetails>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                                    <Quantity>1.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                                    <Quantity>2.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                                    <Quantity>3.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                                    <Quantity>4.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>1.00000</ErpOrderLineNum>
                                    <Quantity>5.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>6.00000</ErpOrderLineNum>
                                    <Quantity>6.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>7.00000</ErpOrderLineNum>
                                    <Quantity>6.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>8.00000</ErpOrderLineNum>
                                    <Quantity>6.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                                 <ContainerDetail>
                                    <BundleId>0</BundleId>
                                    <ErpOrder>3000013661</ErpOrder>
                                    <ErpOrderLineNum>9.00000</ErpOrderLineNum>
                                    <Quantity>6.00000</Quantity>
                                    <QuantityUm>Each</QuantityUm>
                                 </ContainerDetail>
                              </ContainerDetails>
                              <ContainerType>
                                 <ProcessStamp>fe4e12f2-ac06-4786-b1ff-509c82792d45</ProcessStamp>
                                 <UserStamp>sboisvert</UserStamp>
                                 <Class>Carton(s)</Class>
                                 <Desc>Carton</Desc>
                                 <DimensionUm>IN</DimensionUm>
                                 <Height>20.00000</Height>
                                 <Length>20.00000</Length>
                                 <MaxWeight>70.00000</MaxWeight>
                                 <Type>Carton</Type>
                                 <UseAsDefault>Y</UseAsDefault>
                                 <Volume>8000.00000</Volume>
                                 <Weight>0.50000</Weight>
                                 <WeightUm>LB</WeightUm>
                                 <WeightTolerance>1.00000</WeightTolerance>
                                 <Width>20.00000</Width>
                              </ContainerType>
                              <GroupNum>0</GroupNum>
                              <GroupPosition>0</GroupPosition>
                              <InternalContainerNum>1008185</InternalContainerNum>
                              <InternalShipmentNum>1009736</InternalShipmentNum>
                              <ManifestId/>
                              <ManifestState/>
                              <Msn>0</Msn>
                              <Status>900</Status>
                              <StatusFailed>N</StatusFailed>
                              <TotalAccCharge>0.00000</TotalAccCharge>
                              <TotalFreightCharge>0.00000</TotalFreightCharge>
                              <TotalFreightDiscount>0.00000</TotalFreightDiscount>
                              <TotalQuantity>71.00000</TotalQuantity>
                              <TotalValue>0.00000</TotalValue>
                              <TotalWeight>36.10000</TotalWeight>
                              <TreeUnit>1008185</TreeUnit>
                              <WeightUm>KG</WeightUm>
                           </ShippingContainer>
                        </NestedContainers>
                     </ShippingContainer>
                  </Containers>
            </Shipment>
            </Shipments>
      </WMFWUpload>
   </WMWDATA>
</WMWROOT>

我喜欢获取Header的数量(可以在xslt中看到)并且必须分配给TotalRec。

我想使用相同的xslt获取计数,因为我使用另一个xslt然后我的整个设计必须改变。

有人可以给我解决方案或逻辑。

示例输出  &LT;

ns1:ASN-Feed><ns1:Header><ns1:StoreNum>763</ns1:StoreNum>
<ns1:ReceivingType>A</ns1:ReceivingType><ns1:PartnerShipmentNum/><ns1:OrderDate/>      <ns1:ShipmentReceiptDate>13-03-21</ns1:ShipmentReceiptDate><ns1:ShipperName>001 GARAGE MONTREAL</ns1:ShipperName><ns1:PartnerItemNum>3088853</ns1:PartnerItemNum>      <ns1:QuantityShipped>1</ns1:QuantityShipped><ns1:ItemCost/><ns1:ShippingComments/>
<ns1:TrailerNumber/><ns1:CartonId>00826494000001913301</ns1:CartonId>      <ns1:ASNNumber>08264940000006140</ns1:ASNNumber>     <ns1:CreateDateTime>2013-03-21-09.50.38</ns1:CreateDateTime><ns1:Warehouse>235</ns1:Warehouse>
</ns1:Header><ns1:Trailer><ns1:RecordId>TRAILER</ns1:RecordId><ns1:TotalRec>1</ns1:TotalRec>
<ns1:BatchId>1002012</ns1:BatchId></ns1:Trailer></ns1:ASN-Feed>

请注意,此示例与提供的XML

无关

问候。

2 个答案:

答案 0 :(得分:0)

目前,XSLT从该输入产生0个Header元素,主要是因为XPath中缺少imp1:Carrier并且在任何地方都没有imp1:WareHouse元素,但是一旦这些元素得到补救,XSLT就可以简化了直到弄清楚最后的标头计数要容易得多:

<xsl:stylesheet version="1.0"
   xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
   xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
   xmlns:ns1="http://TargetNamespace.com/WriteGSIASNFile"
   xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/WMStoATG/WMSShipmentConfirmation/ReadWMSShipmentConfirmationFile"
   xmlns:pc="http://xmlns.oracle.com/pcbpel/"
   xmlns:imp1="http://www.manh.com/ILSNET/Interface"
   xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
   xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
   xmlns:ora="http://schemas.oracle.com/xpath/extension"
   xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
   xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
   xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
   xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
   xmlns:ns0="http://xmlns.oracle.com/pcbpel/adapter/file/WMStoRMS/WMSShipmentConfirmation/WriteGSIASNFile"
   xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
   xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
   xmlns:med="http://schemas.oracle.com/mediator/xpath"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
   xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
   xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
   exclude-result-prefixes="xsi xsl tns pc imp1 plt wsdl jca xsd ns1 ns0 xp20 
                                         bpws bpel bpm ora socket mhdr oraext dvm hwf med 
                                         ids xdk xref ldap">
  <xsl:output indent="yes" omit-xml-declaration="yes" />

  <xsl:template match="/">
    <xsl:variable
       name="AllShipments"
       select="/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload/imp1:Shipments
               /imp1:Shipment"/>
    <xsl:variable
       name="ShipmentsFilterType"
       select="$AllShipments[imp1:OrderType = 'Refill' or
                             imp1:OrderType = 'Store Order']" />
    <xsl:variable
       name="ShipmentsFilterWarehouse"
       select="$ShipmentsFilterType[imp1:WareHouse = '8001']" />
    <xsl:variable
       name="ShipmentsFilterUser"
       select="$ShipmentsFilterWarehouse[imp1:Details/imp1:ShipmentDetail[1]
                                                    /imp1:UserDef3 != '']" />
    <xsl:variable
       name="RecordCount"
       select="count($ShipmentsFilterUser
                         /imp1:Containers/imp1:ShippingContainer
                         /imp1:NestedContainers/imp1:ShippingContainer
                         /imp1:ContainerDetails/imp1:ContainerDetail)"/>
    <ns1:ASN-Feed>
      <xsl:apply-templates select="$ShipmentsFilterUser" />
      <ns1:Trailer>
        <ns1:RecordId>
          <xsl:text disable-output-escaping="no">TRAILER</xsl:text>
        </ns1:RecordId>
        <ns1:TotalRec>
          <xsl:value-of select="$RecordCount + 1.0"/>
        </ns1:TotalRec>
        <ns1:BatchId>
          <xsl:value-of
             select="/imp1:WMWROOT/imp1:WMWDATA/imp1:WMFWUpload
                     /imp1:Shipments/imp1:Shipment[1]/imp1:ShippingLoadNum"/>
        </ns1:BatchId>
      </ns1:Trailer>
    </ns1:ASN-Feed>
  </xsl:template>

  <xsl:template match="imp1:Shipment">
    <xsl:apply-templates select="imp1:Containers/imp1:ShippingContainer" />
  </xsl:template>

  <xsl:template match="imp1:Containers/imp1:ShippingContainer">
    <xsl:apply-templates select="imp1:NestedContainers/imp1:ShippingContainer" />
  </xsl:template>

  <xsl:template match="imp1:NestedContainers/imp1:ShippingContainer">
    <xsl:apply-templates select="imp1:ContainerDetails/imp1:ContainerDetail">
      <xsl:with-param name="ContainerId" select="imp1:ContainerId" />
    </xsl:apply-templates>
  </xsl:template>

  <xsl:template match="imp1:ContainerDetails/imp1:ContainerDetail">
    <xsl:param name="ContainerId" />
    <xsl:variable name="ErpOrderContLevel" select="imp1:ErpOrder"/>
    <xsl:variable name="ErpOrderLineNumContLevel"
                  select="imp1:ErpOrderLineNum"/>
    <xsl:variable name="Position" select="position()"/>
    <ns1:Header>
      <ns1:StoreNum>
        <xsl:text disable-output-escaping="no">763</xsl:text>
      </ns1:StoreNum>
      <ns1:ReceivingType>
        <xsl:text disable-output-escaping="no">A</xsl:text>
      </ns1:ReceivingType>
      <ns1:PartnerShipmentNum>
        <xsl:text disable-output-escaping="no"></xsl:text>
      </ns1:PartnerShipmentNum>
      <ns1:OrderDate>
        <xsl:text disable-output-escaping="no"></xsl:text>
      </ns1:OrderDate>
      <ns1:ShipmentReceiptDate>
        <xsl:value-of select='xp20:format-dateTime(xp20:current-date(),
                                                   "[Y01]-[M01]-[D01]")'/>
      </ns1:ShipmentReceiptDate>
      <ns1:ShipperName>
        <xsl:text disable-output-escaping="no">001 GARAGE MONTREAL</xsl:text>
      </ns1:ShipperName>
      <xsl:for-each
         select="ancestor::imp1:Carrier/imp1:Details/imp1:ShipmentDetail">
        <xsl:variable name="ErpOrderDetailLevel"
                      select="imp1:ErpOrder"/>
        <xsl:variable name="ErpOrderLineNumDetailLevel"
                      select="imp1:ErpOrderLineNum"/>
        <xsl:variable name="ItemSKU" select="imp1:SKU/imp1:Item"/>
        <xsl:if
             test="($ErpOrderDetailLevel = $ErpOrderContLevel) and 
                   ($ErpOrderLineNumDetailLevel = $ErpOrderLineNumContLevel)">
          <ns1:PartnerItemNum>
            <xsl:value-of select="$ItemSKU"/>
          </ns1:PartnerItemNum>
        </xsl:if>
      </xsl:for-each>
      <xsl:choose>
        <xsl:when test="imp1:Quantity">
          <ns1:QuantityShipped>
            <xsl:value-of select="number(imp1:Quantity)"/>
          </ns1:QuantityShipped>
        </xsl:when>
        <xsl:otherwise>
          <ns1:QuantityShipped>
            <xsl:value-of select="imp1:Quantity"/>
          </ns1:QuantityShipped>
        </xsl:otherwise>
      </xsl:choose>
      <ns1:ItemCost>
        <xsl:text disable-output-escaping="no"></xsl:text>
      </ns1:ItemCost>
      <ns1:ShippingComments>
        <xsl:text disable-output-escaping="no"></xsl:text>
      </ns1:ShippingComments>
      <ns1:TrailerNumber>
        <xsl:text disable-output-escaping="no"></xsl:text>
      </ns1:TrailerNumber>
      <xsl:choose>
        <xsl:when test="string-length($Position) > 1.0">
          <ns1:CartonId>
            <xsl:value-of select="concat(substring($ContainerId,3.0),$Position)"/>
          </ns1:CartonId>
        </xsl:when>
        <xsl:otherwise>
          <ns1:CartonId>
            <xsl:value-of select='concat(substring($ContainerId,3.0), 
                                         "0", position())'/>
          </ns1:CartonId>
        </xsl:otherwise>
      </xsl:choose>
      <ns1:ASNNumber>
        <xsl:value-of select="ancestor::imp1:Shipment/imp1:BolNumAlpha"/>
      </ns1:ASNNumber>
      <ns1:CreateDateTime>
        <xsl:value-of select='xp20:format-dateTime(xp20:current-dateTime(),
                                    "[Y0001]-[M01]-[D01]-[H01].[m01].[s01]")'/>
      </ns1:CreateDateTime>
      <ns1:Warehouse>
        <xsl:text disable-output-escaping="no">235</xsl:text>
      </ns1:Warehouse>
    </ns1:Header>
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

尝试将您的逻辑嵌套到xsl:variable中并对变量

进行计数

包含以下样本模板

<xsl:variable name="headerDoc" as="node()*">
  your for loops ...
 <ns1:Header>
   <ns1:StoreNum> ... your logic goes here </ns1:StoreNum>
 </ns1:Header> 
</xsl:variable>

<xsl:variable name="TotalRec" select="count($headerDoc/*:Header)"/>应该给出标题的计数