Go Back   Velocity Reviews > Newsgroups > XML
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

XML - Help with select statment on for-each

 
Thread Tools Search this Thread
Old 06-27-2003, 05:16 PM   #1
Default Help with select statment on for-each


I am using the for-each below to build a table where the header is
a unique nonblank EQUIP_TYPE. This works well.

What I would like to do is not execute the for loop on on EQUIP_TYPE
unless one of the AUTOMATED tags equals YES.

I can change the data so that each row whould contain a tag that
shows if the EQUIP_TYPE has an AUTOMATED member but that seems wasteful.



<xsl:key name="tools-by-type" match="row" use="EQUIP_TYPE"/>
<xsl:template match="document">
<xsl:for-each select="row[count(. | key('tools-by-type', EQUIP_TYPE)[1])
= 1 and EQUIP_TYPE[string-length()>0 ] ">


sample of the XML

<document>
<row rowNumber="1">
<EQUIP_TYPE>ASH</EQUIP_TYPE>
<TOOL_NAME>ASHZ01ED</TOOL_NAME>
<AUTOMATED>YES</AUTOMATED>
</row>
<row rowNumber="2">
<EQUIP_TYPE>ASH</EQUIP_TYPE>
<TOOL_NAME>ASHZ02ED</TOOL_NAME>
<AUTOMATED>YES</AUTOMATED>
</row>
</document>



Bill Sneddon
  Reply With Quote
Old 06-27-2003, 11:24 PM   #2
Marrow
 
Posts: n/a
Default Re: Help with select statment on for-each

Hi Bill,

I'm not absolutely sure what you want... but I think you are saying...

1) select the rows based on distinct <EQUIP_TYPE>
2) but only where the <EQUIP_TYPE> is not 'empty'
3) and where any one of the rows within that distinct <EQUIP_TYPE> value has
an <AUTOMATED> of 'YES'

If so, then perhaps you need something like...

<xsl:for-each select="row[EQUIP_TYPE/text()]
[generate-id() =
generate-id(key('tools-by-type',EQUIP_TYPE))]

[key('tools-by-type',EQUIP_TYPE)/AUTOMATED = 'YES']">

(nb. the predicates are respective to the numbered filter conditions above).

BTW, you are better to use the generate-id() version of the Muenchian
Technique as it generally performs better than the count() version of the
same technique.

Hope this helps
Marrow
http://www.marrowsoft.com - home of Xselerator (XSLT IDE and debugger)
http://www.topxml.com/Xselerator



"Bill Sneddon" <> wrote in message
news:bdhqln$3iq$...
> I am using the for-each below to build a table where the header is
> a unique nonblank EQUIP_TYPE. This works well.
>
> What I would like to do is not execute the for loop on on EQUIP_TYPE
> unless one of the AUTOMATED tags equals YES.
>
> I can change the data so that each row whould contain a tag that
> shows if the EQUIP_TYPE has an AUTOMATED member but that seems wasteful.
>
>
>
> <xsl:key name="tools-by-type" match="row" use="EQUIP_TYPE"/>
> <xsl:template match="document">
> <xsl:for-each select="row[count(. | key('tools-by-type', EQUIP_TYPE)[1])
> = 1 and EQUIP_TYPE[string-length()>0 ] ">
>
>
> sample of the XML
>
> <document>
> <row rowNumber="1">
> <EQUIP_TYPE>ASH</EQUIP_TYPE>
> <TOOL_NAME>ASHZ01ED</TOOL_NAME>
> <AUTOMATED>YES</AUTOMATED>
> </row>
> <row rowNumber="2">
> <EQUIP_TYPE>ASH</EQUIP_TYPE>
> <TOOL_NAME>ASHZ02ED</TOOL_NAME>
> <AUTOMATED>YES</AUTOMATED>
> </row>
> </document>
>



  Reply With Quote
Old 06-28-2003, 02:28 AM   #3
Bill Sneddon
 
Posts: n/a
Default Re: Help with select statment on for-each

Yes you understood what I wanted thank you for being so helpful.
It will be a little while before I can test this but will test again
when that time comes.


Marrow wrote:
> Hi Bill,
>
> I'm not absolutely sure what you want... but I think you are saying...
>
> 1) select the rows based on distinct <EQUIP_TYPE>
> 2) but only where the <EQUIP_TYPE> is not 'empty'
> 3) and where any one of the rows within that distinct <EQUIP_TYPE> value has
> an <AUTOMATED> of 'YES'
>
> If so, then perhaps you need something like...
>
> <xsl:for-each select="row[EQUIP_TYPE/text()]
> [generate-id() =
> generate-id(key('tools-by-type',EQUIP_TYPE))]
>
> [key('tools-by-type',EQUIP_TYPE)/AUTOMATED = 'YES']">
>
> (nb. the predicates are respective to the numbered filter conditions above).
>
> BTW, you are better to use the generate-id() version of the Muenchian
> Technique as it generally performs better than the count() version of the
> same technique.
>
> Hope this helps
> Marrow
> http://www.marrowsoft.com - home of Xselerator (XSLT IDE and debugger)
> http://www.topxml.com/Xselerator
>
>
>
> "Bill Sneddon" <> wrote in message
> news:bdhqln$3iq$...
>
>>I am using the for-each below to build a table where the header is
>>a unique nonblank EQUIP_TYPE. This works well.
>>
>>What I would like to do is not execute the for loop on on EQUIP_TYPE
>>unless one of the AUTOMATED tags equals YES.
>>
>>I can change the data so that each row whould contain a tag that
>>shows if the EQUIP_TYPE has an AUTOMATED member but that seems wasteful.
>>
>>
>>
>><xsl:key name="tools-by-type" match="row" use="EQUIP_TYPE"/>
>><xsl:template match="document">
>><xsl:for-each select="row[count(. | key('tools-by-type', EQUIP_TYPE)[1])
>>= 1 and EQUIP_TYPE[string-length()>0 ] ">
>>
>>
>>sample of the XML
>>
>><document>
>> <row rowNumber="1">
>><EQUIP_TYPE>ASH</EQUIP_TYPE>
>><TOOL_NAME>ASHZ01ED</TOOL_NAME>
>><AUTOMATED>YES</AUTOMATED>
>> </row>
>> <row rowNumber="2">
>><EQUIP_TYPE>ASH</EQUIP_TYPE>
>><TOOL_NAME>ASHZ02ED</TOOL_NAME>
>><AUTOMATED>YES</AUTOMATED>
>> </row>
>></document>
>>

>
>


  Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump