XSLT: 绝对路径取值

在做inheritance从XML中拿值的时候,遇到的路径问题。绝对路径为:DOC/PACK/ITEM

XML 文件信息:

<DOC xmlns:idex="http://www.idex.net/document">
    <idex:Header>
        <idex:Owner idex:id="793101edc0a8022000f102d3b2a2c97e">
            <idex:ServiceProvider>1</idex:ServiceProvider>
            <idex:TradingPartner>LAFAYETTEVENDOR</idex:TradingPartner>
        </idex:Owner>
        <idex:Originator idex:id="793101edc0a8022000f102d3b2a2c97e">
            <idex:ServiceProvider>1</idex:ServiceProvider>
            <idex:TradingPartner>LAFAYETTEVENDOR</idex:TradingPartner>
        </idex:Originator>
        <idex:Reference>VTEST06.S.4</idex:Reference>
        <idex:DocId>c7511da7c0a802200060876047cd9e06</idex:DocId>
        <idex:Version>1</idex:Version>
        <idex:Status>final</idex:Status>
        <idex:CreateOn>2013-12-06T09:50:51Z</idex:CreateOn>
        <idex:LastModifiedOn>2013-12-06T09:51:39Z</idex:LastModifiedOn>
    </idex:Header>
    <Order>
        <CustomerOrderNo>VTEST06</CustomerOrderNo>
        <BuyerID>LAFAYETTE</BuyerID>
        <OrderDate>2008-08-30</OrderDate>
        <DocType>856</DocType>
        <PLNo>VTEST06.S.4</PLNo>
        <PLDate>2013-12-06</PLDate>
        <PLReleaseNo/>
        <RequestedShipDate>2008-10-02</RequestedShipDate>
        <DepartmentNo>121</DepartmentNo>
        <DivisionNo/>
        <Remarks>c736749fc0a8022001e2befac071f4ef</Remarks>
        <TotalPackingQuantity>288</TotalPackingQuantity>
        <IDEXXML>
            <HEPoNumber>VTEST06</HEPoNumber>
            <HEPoType>9</HEPoType>
            <OI2RequestedShipDate>2008-10-02</OI2RequestedShipDate>
            <OI2CreateDate>2008-08-30</OI2CreateDate>
            <DepartmentNumber>121</DepartmentNumber>
            <DepartmentLabel>MODE TONIQUE</DepartmentLabel>
            <OrderStatus>FERME</OrderStatus>
            <TradeEventNumber>342</TradeEventNumber>
            <OrderPurpose>REA</OrderPurpose>
            <OrderPurposeLabel>COMMANDE DE REASSORT</OrderPurposeLabel>
            <I1GroupNumber>05-LINGERIE</I1GroupNumber>
            <I1OrderProposalNumber>ND65</I1OrderProposalNumber>
            <BYID>10001</BYID>
            <BYName2>BY NAME2</BYName2>
            <BYName>BY ANME</BYName>
            <BYAddress>BY ADD</BYAddress>
            <BYAddress2>BY ADD2</BYAddress2>
            <BYAddress3>BY ADD3</BYAddress3>
            <BYCity>LONDON</BYCity>
            <BYPostalCode>5281</BYPostalCode>
            <BYCountry>ENG</BYCountry>
            <IVName>IV ANME</IVName>
            <IVAddress>IV ADD</IVAddress>
            <IVAddress2>BY ADD2</IVAddress2>
            <T1BuyerCurrency>EUR</T1BuyerCurrency>
            <T1ExchangeRate>20</T1ExchangeRate>
            <DeliveryTerms>CIF</DeliveryTerms>
            <LIN id="1">
                <LINCount>1</LINCount>
                <DDLineNumber>1</DDLineNumber>
                <LINEAN>3123450746154</LINEAN>
                <LINBuyerItemNo>A000001</LINBuyerItemNo>
                <LINSupplierItemNo>GL000001</LINSupplierItemNo>
                <LINStyleNo>GL000002</LINStyleNo>
                <LINColour>BLANC&#10;BLAND&#10;BLANE&#10;BLANF</LINColour>
                <LINSize>B090&#10;B090&#10;B090&#10;B090</LINSize>
                <LINOrderedQuantity>144</LINOrderedQuantity>
                <LINPCB>12</LINPCB>
                <LINSPCB>2</LINSPCB>
                <LINProductInformation>COAT ACE&#10;COAT ACE</LINProductInformation>
                <LINNetUnitPrice>12.95</LINNetUnitPrice>
                <LINPreparationNumber>124567809654345</LINPreparationNumber>
                <LINGLN>3020550050208</LINGLN>
                <LINCodeListQualifier>5</LINCodeListQualifier>
                <LINStoreCodeLabel>12345 GL SAINTES</LINStoreCodeLabel>
            </LIN>
            <MonetaryAmount>3763.2</MonetaryAmount>
            <TotalOrderedQuantity>288</TotalOrderedQuantity>
        </IDEXXML>
    </Order>
    <PACK id="1">
        <ContainerId/>
        <TareId/>
        <PACKCount>1</PACKCount>
        <PackDCNo/>
        <PackEquipmentNo/>
        <PackGrossWeight>0.00</PackGrossWeight>
        <PackGrossWeightUOM/>
        <PackHeight>0.00</PackHeight>
        <PackHeightUOM/>
        <PackLength>0.00</PackLength>
        <PackLengthUOM/>
        <PackNetNetWeight>0.00</PackNetNetWeight>
        <PackNetNetWeightUOM/>
        <PackNetWeight>0.00</PackNetWeight>
        <PackNetWeightUOM/>
        <PackSSCC18>00012345670004962562</PackSSCC18>
        <PackStoreNo/>
        <PackWidth>0.00</PackWidth>
        <PackWidthUOM/>
        <Remarks/>
        <CartonItemQuantity>144</CartonItemQuantity>
        <LIN id="1">
            <OrderNo>VTEST06</OrderNo>
            <OrderVersion>1</OrderVersion>
            <ItemID/>
            <LINColor/>
            <LINCount>1</LINCount>
            <LINDestinationID/>
            <LINProductDescription>COAT ACE COAT ACE</LINProductDescription>
            <LINQuantityUOM/>
            <LINSKU>3123450746154A000001GL000001GL000002</LINSKU>
            <LINSizeCode/>
            <LINStyleNo>N/A</LINStyleNo>
            <LINUniqueCode>3123450746154A000001GL000001GL000002</LINUniqueCode>
            <LINUnitPrice>12.95</LINUnitPrice>
            <LINRemarks/>
            <LINWarehouseID/>
            <LINDeliveryQuantity>144</LINDeliveryQuantity>
            <LINSplitInto>0</LINSplitInto>
        </LIN>
    </PACK>
</DOC>


通过绝度路径提取LIN层下面的数据: <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/******"/>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="idex java" version="1.0" xmlns:idex="http://www.idex.net/document" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java">
    <xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0"/>
    <xsl:variable name="apo">
        <xsl:text>&apos;</xsl:text>
    </xsl:variable>
    <xsl:variable name="orgId" select="/DOC/idex:Header/idex:Owner/@idex:id"/>
    <xsl:variable name="orgTP" select="/DOC/idex:Header/idex:Owner/idex:TradingPartner"/>
    <xsl:variable name="formId" select="java:com.core.idex.form.FormModel.getFormId(1,'LAFAYETTE','orders')"/>
    <xsl:key name="PACKKey" match="PACK" use="PackSSCC18"/>
    <xsl:key name="LINPoKey" match="LIN" use="LINEAN"/>
    <xsl:key name="ItemKey" match="LIN" use="concat(../PackSSCC18,OrderNo,LINUniqueCode)"/>
    <xsl:variable name="indexedFieldsLocator" select="java:com.core.ci.generic.idex.document.util.DocIndexedFieldsLocator.new($orgId,$formId)"/>
    <xsl:key name="orderKey" match="Order" use="CustomerOrderNo"/>
    <xsl:variable name="orders" select="count(DOC/Order[generate-id() = generate-id(key('orderKey',CustomerOrderNo))])"/>
    <xsl:template match="/">
        <xsl:for-each select="DOC">
            <xsl:element name="DOC">
                <xsl:variable name="docId" select="Order[1]/Remarks"/>
                <idex:Header>
                    <idex:Reference>
                        <xsl:value-of select="idex:Header/idex:Reference"/>
                    </idex:Reference>
                </idex:Header>
                <ACKStatus/>
                <HEDate>@TodayNew</HEDate>
                <HEShipmentNumber/>
                <PODocId>
                    <xsl:value-of select="$docId"/>
                </PODocId>
                <SCurrentScheduledDeliveryDate/>
                <SDateShipped/>
                <CarrierCode/>
                <DeliveryRank/>
                <TotalNumberOfDelivery/>
                <ShipmentCommodityCode/>
                <ShipmentLadingDescription/>
                <xsl:variable name="packs" select="PACK[generate-id()=generate-id(key('PACKKey', PackSSCC18))]"/>
                <xsl:variable name="prevId" select="0"/>
                <xsl:for-each select="$packs">
                    <!--xsl:for-each select="PACK"-->
                    <xsl:variable name="sscc" select="PackSSCC18"/>
                    <xsl:element name="PACK">
                        <xsl:attribute name="id"><xsl:value-of select="$prevId + position()"/></xsl:attribute>
                        <PackageQuantity>1</PackageQuantity>
                        <PackageType/>
                        <MarkingInstructionsCode/>
                        <SSCC>
                            <xsl:value-of select="$sscc"/>
                        </SSCC>
                        <SupplierInternalPackageNo/>
                        <xsl:for-each select="LIN">
                            <xsl:element name="ITEM">
                                <xsl:attribute name="id"><xsl:value-of select="position()"/></xsl:attribute>
                                <xsl:variable name="itemCode" select="LINUniqueCode"/>
                                <xsl:variable name="orderNo" select="OrderNo"/>
                                <xsl:variable name="linPODocId" select="../../Order[CustomerOrderNo=$orderNo]/Remarks"/>
                                <DDLineNumber>
                                    <xsl:value-of select="position()"/>
                                </DDLineNumber>
                                <LINBuyerItemNo>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINBuyerItemNo"/>
                                </LINBuyerItemNo>
                                <LINEAN>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINEAN"/>
                                </LINEAN>
                                <LINSupplierItemNo>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINSupplierItemNo"/>
                                </LINSupplierItemNo>
                                <LINStyleNo>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINStyleNo"/>
                                </LINStyleNo>
                                <DPMDescription/>
                                <LINShippedQuantity>
                                    <xsl:value-of select="LINDeliveryQuantity"/>
                                </LINShippedQuantity>
                                <LINInnerPack>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINSPCB"/>
                                </LINInnerPack>
                                <SBestBeforeDate/>
                                <LINPreparationNumber/>
                                <LineNumber/>
                                <LINGLN>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINGLN"/>
                                </LINGLN>
                                <LINStoreCodeLabel>
                                    <xsl:value-of select="../../Order[CustomerOrderNo=$orderNo]/IDEXXML/LIN[concat(LINEAN, LINBuyerItemNo, LINStyleNo, LINSupplierItemNo=$itemCode)]/LINStoreCodeLabel"/>
                                </LINStoreCodeLabel>
                            </xsl:element>
                        </xsl:for-each>
                    </xsl:element>
                </xsl:for-each>
            </xsl:element>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

 

 

 

posted @ 2013-12-13 10:55  vicky_zhang  阅读(898)  评论(0)    收藏  举报