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 BLAND BLANE BLANF</LINColour> <LINSize>B090 B090 B090 B090</LINSize> <LINOrderedQuantity>144</LINOrderedQuantity> <LINPCB>12</LINPCB> <LINSPCB>2</LINSPCB> <LINProductInformation>COAT ACE 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>'</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>

浙公网安备 33010602011771号