[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: How Can You Exit an xsl:for-each Loop Prematurely?
I was afraid that using the example with a null was going to oversimplify the problem. Here is a portion of my actual XLM which I am supplied and have no control over. <METADATA> <CODES CLASS="CATEGORY"> <CODE CODE="NEWS"/> <CODE CODE="IT"/> <CODE CODE="DE"/> <CODE CODE="EUROPE"/> <CODE CODE="CRIM"/> <CODE CODE="GB"/> <CODE CODE="ODD"/> </CODES> </METADATA> <StringMap> <textIn SupCat="AAA" iCat="Ratings News"/> <textIn SupCat="ADV" iCat="Advertising"/> <textIn SupCat="ODD" iCat="Human Interest"/> <textIn SupCat="GB" iCat="Great Britain"/> </StringMap> The actual transformation is to see if any CODE attribute in the METADATA matches any SupCat in the StringMap and if it does then output the iCat value. BUT I want to output only one match, i.e., if there is more than one match (as in this case GB and ODD both match) I want only one of them. I would also like it to be determinant which would be output given the ordering in the METADATA and/or the StringMap. I am able to write a transform which gets all of the matches but not only the "first". mike (Embedded image moved Steve Dahl <sdahl@xxxxxxxxxxx> to file: 09/23/99 02:02 PM pic25952.pcx) To: Michael Teigman <michael.teigman@xxxxxxxxxxx> cc: (bcc: Michael Teigman/HPG/US/Reuters) Subject: Re: How Can You Exit an xsl:for-each Loop Prematurely? Try something like this: <xsl:for-each select="//Salesman/Orders/@Order[string(.) != ''][1]"> ...output something... </xsl:for-each/> The first bracket should eliminate empty attributes, and the second should restrict the search to the first one only. Michael Teigman wrote: > My source XML has an element with a set of attributes with the same name e.g., > > <Salesman> > <Orders Order=""/> > <Orders Order=""/> > <Orders Order="zzzzzzzzz"/> > <Orders Order="ee"/> > </Salesman> > > To simplify, I am doing the equivalent of trying to find the first non-null > Order, e.g.: > > <xsl:for-each select="//Salesman/Orders/@Order"> > <xsl:variable name="orderID"> > <xsl:value-of select="."/> > </xsl:variable> > <xsl:if test="string-length($orderID) > 0"> > ..... output something ..... > </xsl:if> > </xsl:for-each> > > I want only the first output. I do not want multiple outputs. > > How could I exit after the first or suppress the additional outputs after I have > found one? > > mike -- - Steve Dahl sdahl@xxxxxxxxxxx ------------------------------------------------------------------------ Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of Reuters Ltd. Attachment:
pic25952.pcx
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|