[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Complex Match Pattern
Tom Thank you so much!! It works!! Ming-tzung Dung -----Original Message----- From: Thomas B. Passin [mailto:tpassin@xxxxxxxxxxxx] Sent: Wednesday, May 01, 2002 3:33 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: Complex Match Pattern [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 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|