xsl-list
[Top] [All Lists]

Conditional select

2005-10-27 14:27:26

Not sure how to define the problem but here goes.

I am having trouble writing out an optional element only if a condition
exists. I only want to display the indicators element IF and Only IF it
finds
a matching target. I cant figure out how to code this so that it only
writes out that tag if it finds a target and then writes out the
<indicator><name> as specified for each indicator that it finds.

I am not very good with templates and I assume that there is some
combination of templates that I could use to get this to work and I also
assume that this is a simple fix for the gurus our there but I am at a
loss.

Thanks for your help
Tom

<!-- my source XML File -->

<assets>
 <asset ID="A1001001A05J27B34524B67807">
    <entity>OFFER_PROFILES</entity>
    <metadata attribute="OFF_PRF_ID_NO" namespace="User">1442</metadata>
    <metadata attribute="OFF_PRF_NM" namespace="User">Request</metadata>
   
        <relationship target="1" />
        <relationship target="2" />
        <relationship target="3" />
  
 </asset>

 <asset ID="1">
    <entity>NONPOEINDICATOR</entity>
    <metadata attribute="INDICATOR_CD" namespace="User">met1</metadata>
    <metadata attribute="INDICATOR_NM" namespace="User">Name 1/metadata>
    <metadata attribute="INDICATOR_TX" namespace="User">the
application?</metadata>
  </asset>
 <asset ID="3">
    <entity>NONPOEINDICATOR</entity>
    <metadata attribute="INDICATOR_CD"
namespace="User">ctionAvailable</metadata>
    <metadata attribute="INDICATOR_NM" namespace="User">Name
3</metadata>
    <metadata attribute="INDICATOR_TX" namespace="User"> of the
application?</metadata>
  </asset>

</assets>


<!-- MY TRANSFORM -->

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:fo="http://www.w3.org/1999/XSL/Format";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:fn="http://www.w3.org/2005/02/xpath-functions";
xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes";>

        <xsl:template match="/assets">
        
<request>


                <!-- Indicators -->
                <!-- select only the indicators linked to the offer
profile -->
                <indicators xmlns=""> <!-- this is optional and should
only be displayed if an indicator is linked -->
                        
                        <xsl:for-each select="asset[entity =
'OFFER_PROFILES']/relationship">
                                <xsl:variable name="tmpID"><xsl:value-of
select="@target" /></xsl:variable>
                                
                                <!-- for each indicator -->
                                <!-- traverses through every
NONPOEINDICATOR to find a match -->
                                <xsl:for-each select="//asset[entity =
'NONPOEINDICATOR']">
                                        <!-- if the relationship target
equals the asset ID then we have found a match -->
                                        <xsl:if test="$tmpID = @ID">
                                                <indicator
xmlns=""><name xmlns=""><xsl:value-of select="metadata[(_at_)attribute =
'INDICATOR_NM']" /></name></indicator>          
                                        </xsl:if> <!-- if found a
matching ID -->
                                </xsl:for-each> <!-- for each indicator
-->
                        </xsl:for-each> <!-- for each relationship tag
-->
                        
                </indicators>

</request>

        </xsl:template>
</xsl:stylesheet>

<!-- current output if it finds targets -->
<request>
        <indicators xmlns="">
                <indicator>
                        <name>Name 1</name>
                </indicator>
                <indicator>
                        <name>Name 3</name>
                </indicator>
        </indicators>
</request>

<!-- current output if no targets are found -->
<!-- this is the problem, how do i structure the xsl so that it only
writes out this tag if and only if it find a target that matches an
asset ID of type NONPOEINDICATOR? -->

<request>
        <indicators xmlns="" \>
</request>





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>
  • Conditional select, Tom Bueckers <=