Re: [xsl] testing for child node and counting

Subject: Re: [xsl] testing for child node and counting
From: "Joerg Heinicke" <joerg.heinicke@xxxxxx>
Date: Wed, 6 Feb 2002 23:08:07 +0100
> <Orders>
>     <Row att="...">
>         <field_a>...</field_a>
>         <field_b>...</field_b>
>     </Row>
>     <Row att="...">
>         <field_a>...</field_a>
>         <field_b>...</field_b>
>         <field_c>...</field_c>
>     </Row>
>     ...
> </Orders>
>
>
> 1. I want to go through each <row> and create
>    an html table row only if <row> contains a
>    <field_c> child. I've tried this but it
>    didn't work:
>
> <xsl:for-each select="Orders/Row">
>   <xsl:if text="Orders/Row/field_c">
>
>      <tr>
>        <td><xsl:value-of select="field_c"/></td>
>      </tr>
>
>   </xsl:if>
> </xsl:for-each>

<xsl:for-each> is changing the context, so you are already in <Row>-elements
and can not test on Orders/Row/field_c, but only field_c:

<xsl:for-each select="Orders/Row">
    <xsl:if test="field_c">
        <tr>
            <td><xsl:value-of select="field_c"/></td>
        </tr>
    </xsl:if>
</xsl:for-each>

This can be shorten if you combine the if-statement with the
select-statement of for-each:

<xsl:for-each select="Orders/Row[field_c]">
        <tr>
            <td><xsl:value-of select="field_c"/></td>
        </tr>
</xsl:for-each>

> 2. I want to print at the top of the html table
>    the number of <row>s that have a <field_c>
>    child.

<xsl:value-of select="count(Orders/Row[field_c])"/>

> Thanks in advance for any help.
> -alex

Regards,

Joerg


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


Current Thread