[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Accessing multiple values of an attribute

Subject: Re: Accessing multiple values of an attribute
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Tue, 1 Oct 2002 10:57:57 -0700 (PDT)
xml attribute multiple values
--- "Clifford, Karen" <Karen dot Clifford at fid-intl dot com> wrote:

 
> Hello everyone, 
> 
> I have xml similar to the following
> 
> 
> <Table stripes="blue red green purple">
> 	<Boxgrp>
> 		<Boxbod>
> 			<Boxrow>
> 				<Content> First Row</Content>
> 			</Boxrow>
> 			<Boxrow>
> 				<Content> Second Row</Content>
> 			</Boxrow>
> 			<Boxrow>
> 				<Content> Third Row</Content>
> 			</Boxrow>
> 			<Boxrow>
> 				<Content> Fourth Row</Content>
> 			</Boxrow>
> 			<Boxrow>
> 				<Content> Fifth Row</Content>
> 			</Boxrow>
> 			<Boxrow>
> 				<Content> Sixth Row</Content>
> 			</Boxrow>
> 
> 
> The number of values existing in the stripes attribute is variable
> (not
> always 4), and the rows in the table can also be of different numbers
> (i.e.
> I could get one with 20 rows)
> Using xsl, I must access the values of the 'stripes' attribute and
> colour
> the rows of the box.....i.e. in the above case, the box has 6 rows
> and
> 4
> different colours so I want my rows to be coloured in the following
> way: 
> Row 1: blue
> Row 2: red
> Row 3: green
> Row 4: purple
> Row 5: blue
> Row 6: red   etc
>  "         green
>  "         purple
> 
> Question:
> First of all, how do I access the different values of the stripes
> attribute
> (is there an easy way that I have overlooked?)?
> I need to know 
> (a) how many of them there are (for my mod function)
> (b) what values they have. 
> 
> I was trying string-before and string-after but that could get messy
> if
> I
> got alot of different colours.
> 
> Thanks & Regards
> 
> Karen


Hi Karen,

This is a most simple task if you use the "str-split-to-words" from
FXSL.

Given your source xml:
---------------------
<Table stripes="blue red green purple">	
  <Boxgrp>		
    <Boxbod>			
      <Boxrow>				
        <Content> First Row</Content>			
      </Boxrow>			
      <Boxrow>				
        <Content> Second Row</Content>			
      </Boxrow>			
      <Boxrow>				
        <Content> Third Row</Content>			
      </Boxrow>			
      <Boxrow>				
        <Content> Fourth Row</Content>			
      </Boxrow>			
      <Boxrow>				
        <Content> Fifth Row</Content>			
      </Boxrow>			
      <Boxrow>				
        <Content> Sixth Row</Content>			
      </Boxrow>    
    </Boxbod>  
  </Boxgrp>
</Table>

This transformation will extract all colours from the atribute value
and produce a node-set, each element node of which contains the name of
exactly one colour. Then the count() function gives you the number of
colours.

stylesheet:
----------
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:vendor="urn:schemas-microsoft-com:xslt" 
 exclude-result-prefixes="vendor"
>

   <xsl:import href="strSplit-to-Words.xsl"/>

   <xsl:output indent="yes" omit-xml-declaration="yes"/>
   
    <xsl:template match="/">
      <xsl:variable name="vrtf-wordNodes">
        <xsl:call-template name="str-split-to-words">
          <xsl:with-param name="pStr" select="/Table/@stripes"/>
          <xsl:with-param name="pDelimiters" 
                          select="' '"/>
        </xsl:call-template>
      </xsl:variable>
      
      <xsl:variable name="vwordNodes" 
                    select="vendor:node-set($vrtf-wordNodes)"/>
      
      <xsl:copy-of select="$vwordNodes"/>
      
      <xsl:text>&#xA;</xsl:text>
      
      <xsl:value-of select="concat(count($vwordNodes/*), ' colours')"/>
      
    </xsl:template>
    
</xsl:stylesheet>

Result:
------
<word>blue</word><word>red</word><word>green</word><word>purple</word>
4 colours


So, if the variable $vnColours contains the number of colours, then the
colour for the N-th row will be:

$vwordNodes/word[position() = $vRowPosition mod $vnColours]


Hope that this really helped.




=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.