Catherine,
I could not test this idea, but it looks like you are running with XSL
2.0, where variables are sequences and you can apply a filter .
What if you moved your variable outside of the <for-each> , select all
the <po_line_owner> elements then filtered for the first?
(this is just guess)
<xsl:variable name="AllPOLineOwners"
<select="/payment_data/invoice_list/invoice/invoice_line_list/invoice_line/fund_info_list/fund_info/po_line_owner"/>
</xsl:variable>
<xsl:variable name="POOwnerType" select="$AllPOOwnerTypes[1]"/>
--Hank
On Tue, Nov 4, 2014 at 12:10 PM, Catherine Wilbur cwilbur@xxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> 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
> XSL-List info and archive
> EasyUnsubscribe (by email)
--
Hank Ratzesberger
XMLWerks.com
|