Subject: [xsl] Have a node that appears under each line item. - How do I just pick the first occurance From: "Catherine Wilbur cwilbur@xxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 4 Nov 2014 20:09:31 -0000 |
Have a variable I define as follows in my code, How do I pick just the first occurance of po_line_owner. If the invoice has multiple lines with each having a po_line_info/po_line_owner I only one to pick up the first occurance of ../../../../invoice_line/po_line_info/po_line_owner encountered? <xsl:variable name="InvoicePOLineOwner" select="../../../../invoice_line/po_line_info/po_line_owner"/> I then take this variable and perform logic in my code to set the following work variable. I only want to set this variable if I have selected the first occurance of po_line_owner how would I do this? Pulled this logic from my code. <!-- Based on value of InvoicePOLineOwner flag the batch as a Leddy batch or a Law batch: --> <xsl:variable name="POOwnerType"> <xsl:choose> <xsl:when test="contains($InvoicePOLineOwner, 'Law') or contains($InvoicePOLineOwner, 'LAW')"> <xsl:value-of select="'W'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'L'"/> </xsl:otherwise> </xsl:choose> </xsl:variable> Here is my XSL code <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 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" xmlns:err="http://www.w3.org/2005/xqt-errors" exclude-result-prefixes="xs xdt err fn" > <xsl:output method="text" indent="no"/> <!-- Define two date variables - one for current date and one for current date and time: --> <xsl:variable name="GLDateValue" select="format-date(current-date(),'[Y0001][M01][D01]')"/> <xsl:variable name="CurrDateTimeValue" select="format-dateTime(current-dateTime(),'[Y0001][M01][D01][H01][m01]')"/> <xsl:template match="/"> <!-- Loop thru each of the fund_info/amount and write out a CSV record for each fund_info entry found: --> <xsl:for-each select="payment_data/invoice_list/invoice/invoice_line_list/invoice_line/fund_info_list/fund_info/amount"> <!-- Set the a select string variable to move up specified levels (4) then use this string: --> <xsl:variable name="inv" select="../../../../.."/> <!-- Define some work variables and initialize the value: --> <xsl:variable name="InvoiceDateValue" select="translate($inv/invoice_date,'/','')"/> <xsl:variable name="InvoiceVendorCode" select="$inv/vendor_code"/> <xsl:variable name="InvoiceVendorNo" select="$inv/vendor_FinancialSys_Code"/> <xsl:variable name="InvoiceCurrency" select="$inv/invoice_amount/currency"/> <xsl:variable name="InvoicePOLineOwner" select="../../../../invoice_line/po_line_info/po_line_owner"/> <xsl:variable name="InvoiceNumber" select="$inv/invoice_number"/> <!-- Set FISVendorNo variable to the Vendor_FinancialSys_Code or to 99999 if the value is nil: --> <xsl:variable name="FISVendorNo"> <xsl:choose> <xsl:when test="string-length($InvoiceVendorNo)!=0"> <xsl:value-of select="number($InvoiceVendorNo)"/> </xsl:when> <xsl:otherwise>99999</xsl:otherwise> </xsl:choose> </xsl:variable> <!-- Set the Payment Attachment variable to Attachment or blank based on finding certain strings in InvoiceNumber: --> <xsl:variable name="PaymentAttachment"> <xsl:choose> <xsl:when test="contains($InvoiceNumber, '(ATC)') or starts-with($InvoiceNumber, 'PPD')"> <xsl:value-of select="'A'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="' '"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- Set the Payment Terms variable to Urgent or blank based on finding certain strings in InvoiceNumber or finding certain strings in InvoiceVendorCode: --> <xsl:variable name="PaymentTerms"> <xsl:choose> <xsl:when test="contains($InvoiceNumber, '(PPD)') or contains($InvoiceNumber, '(RSH)') or starts-with($InvoiceNumber, 'CM') or contains($InvoiceVendorCode, 'OCL C')"> <xsl:value-of select="'U'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="' '"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- Based on value of InvoicePOLineOwner flag the batch as a Leddy batch or a Law batch: --> <xsl:variable name="POOwnerType"> <xsl:choose> <xsl:when test="contains($InvoicePOLineOwner, 'Law') or contains($InvoicePOLineOwner, 'LAW')"> <xsl:value-of select="'W'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'L'"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- output the CSV comma delimited file with fields in the following order: --> <!-- SeqNo, UserId, BatchNo, AddrNo, GLAcct, InvoiceNo, InvoiceDate, GLDate, CurrencyCode, ExchangeRate, TotalInvoiceAmount, LineItemAmount, Attachment, PaymentTerms, Remark --> <!-- Last field is a new line --> <xsl:value-of select="position(), 'LIBPROD', concat($CurrDateTimeValue,$ POOwnerType,$InvoiceCurrency), $FISVendorNo, ../external_id, $inv/invoice_number, concat(substring($InvoiceDateValue,5,4),substring($InvoiceDateValue,1,2),substring($InvoiceDateValue,3,2)), $GLDateValue, $inv/invoice_amount/currency, $inv/invoice_exchange_rate_list/exchange_rate/rate, $inv/invoice_amount/sum, sum, $PaymentAttachment, $PaymentTerms, concat($inv/vendor_code,'/',$inv/unique_identifier) " separator=", "/> <xsl:text>
</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> _____________________________________________________________________ Catherine Wilbur cwilbur@xxxxxxxxxxx
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Which XPath evaluates fas, Wolfgang Laun wolfga | Thread | Re: [xsl] Have a node that appears , Hank Ratzesberger xm |
Re: [xsl] Which XPath evaluates fas, Wolfgang Laun wolfga | Date | [xsl] How to get XSL style sheet to, Catherine Wilbur cwi |
Month |