Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: [xsl] Complex Match Pattern

From: "Thomas B. Passin" <tpassin@------------>
To:
Date: 5/1/2002 1:27:00 PM
[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
output
> anything.
> Originally, I though that I can use the following code to solve the
problem
>
> <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>

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

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

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

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.

Cheers,

Tom P


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


transparent
Print
Mail
Digg
delicious
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent