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

Re: Getting specific elements from a list

Subject: Re: Getting specific elements from a list
From: JBryant@xxxxxxxxx
Date: Thu, 26 May 2005 16:08:45 -0500
list elements
Hi, Joe,

The thing that's tripping you up is that the EnumValueDescription elements 
don't share the same context, so [1] and [last()] don't do what you want. 
The trick is to get them into the same context, which I did with a 
variable in the following stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

  <xsl:variable name="EVDs" select="//EnumValueDescription"/>

  <xsl:template match="tblEnumeratedTypes">
    test (
          int,
          <xsl:value-of select="EnumeratedType"/>,
          <xsl:value-of select="$EVDs[1]"/>,
          <xsl:value-of select="$EVDs[last()]"/>
    );
  </xsl:template>
 
</xsl:stylesheet>

The output (with Saxon 8.4):

    test (
          int,
          ColorType,
          Red,
          Blue
    );
 
You could do it with a key, too, and I'm sure there are yet other ways 
(but variable and key came to mind right off).

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)




"Simon, Jb" <jb.simon@xxxxxxxx> 
05/26/2005 03:37 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
 Getting specific elements from a list







Hi, I have the following XML snippit :

<tblEnumeratedTypes>
                 <EnumeratedType>ColorType</EnumeratedType>
                 <tblEnumValues>
 <EnumeratedType>ColorType</EnumeratedType>
 <EnumValueDescription>Red</EnumValueDescription>
                 </tblEnumValues>
                 <tblEnumValues>
 <EnumeratedType>ColorType</EnumeratedType>
 <EnumValueDescription>White</EnumValueDescription>
                 </tblEnumValues>
                 <tblEnumValues>
 <EnumeratedType>ColorType</EnumeratedType>
 <EnumValueDescription>Blue</EnumValueDescription>
                 </tblEnumValues>
</tblEnumeratedTypes>

What I need as output is 

TEST ( int, ColorType, Red, Blue )

The problem I'm having is getting the Red and Blue, basically, the 
First and last EnumeratedType element of EnumeratedTypes.

I tried various combinations, although it seems this should have
worked...

                 <xsl:template match="tblEnumeratedTypes_WC" 
mode="range-macro">


test ( 
                 int, 
                 <xsl:value-of select="EnumeratedType"/>,
                 <xsl:value-of select=".//EnumValueDescription[1]"/>,
                 <xsl:value-of select=".//EnumValueDescription[last()]"/>
) ;

                 </xsl:template>

When I execute that I get (line breaks are not a problem)

TEST ( 
                 int, 
                 ColorType,
                 Red,
                 Red
                 ) ;

What is the problem is that I can never get the last Value to be Blue.

Oh, XSL Procesor : Microsoft (R) XSLT Processor Version 4.0
Also tried it using Mozilla, same result

Any Ideas ?

TIA
Joe Simon

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.