Re: [xsl] Complex Match Pattern

Subject: Re: [xsl] Complex Match Pattern
From: "Thomas B. Passin" <tpassin@xxxxxxxxxxxx>
Date: Wed, 1 May 2002 17:32:55 -0400
[Dung, Ming-tzung]

>    The problem I have is about filtering and printing problem.
> **Input XML:
> <Difference>
>   <Object> A </Object>
>   <Change> change1 </Change>
>   <Chnage> change 2 </Change>
>    .....
> </Difference>
>   The requirement is to output the Object content and the "meaningful"
> change content. The "meaningful" change means the content won't contain
> certain value, such as "NULL" or "NONE".
>   The challenges is that if there are no any meaningful change, don't
> anything.
> Originally, I though that I can use the following code to solve the
> <xsl:for-each select="Difference[not(contains(Change, 'NULL]') or
> contains(Change, 'NONE']'))]>
>    <xsl:if test="position()=1">
>        <!-- output the Object content -->
>    </xsl:if>
>        <!-- output the Change content -->
> </xsl:for-each>
>  BUT because the Change could have multiple lines, this design won't work.

If I understand you, if there are no changes you do not even want to output
"Object A".  Then I would probably approach it like this - the idea is to
build up the result of all the changes, then check to see if it actually
contains anything.  The details and possibly the exact form of the test
would depend on the form you want your output to take:

<!-- Inside some template -->
<xsl:apply-templates select='Difference'/>

<xsl:template match='Difference'>
    <xsl:variable name='changes'>
        <xsl:apply-templates select='Change[text()!="NONE" and

    <xsl:if test='$changes!=""'>Object <xsl:value-of select='Object'/>
     Changes: <xsl:value-of select='$changes'/></xsl:if><br/>

<xsl:template match='Change'>
 <xsl:value-of select='.'/>

You need to be careful about stray whitespace.  If you might have whitespace
before or after "NULL" or "NONE", you would need to apply
"normalize-space()" to them or the select path will not work correctly.  If
you want to put the change details into elements, the test might have to
change a little - I just made them all into a string for simplicity.

This stylesheet works right on the sample xml data I created for it, but I'm
sure you will want to adjust it somewhat to suit your needs.


Tom P

 XSL-List info and archive:

Current Thread