Re: [xsl] Group problem with blank elements

Subject: Re: [xsl] Group problem with blank elements
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Thu, 30 Jun 2005 22:55:53 -0700 (PDT)
Hi Prakash,
  Your stylesheet look fine.. But when I run it with
Saxon 6.5.3, I get an error -

Error on line 2 column 6 of
file:/C:/xml/xsleg/xslt/posgroup1.xsl:
  Error reported by XML parser: The processing
instruction target matching "[xX]
[mM][lL]" is not allowed.
Transformation failed: Failed to parse stylesheet

Regards,
Mukul

--- omprakash.v@xxxxxxxxxxxxx wrote:

> 
> 
> 
> 
> 
> Hi,
> 
> The following xslt 1.0 stylesheet should work with a
> little tweaking. If
> there is an easier way to do this in 1.0, Iam not
> aware of it. probably
> much easier in xslt 2.0.
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 
> <xsl:output method="xml" indent="yes" />
> 
> 
> <xsl:template match="/root">
> 
> <xsl:apply-templates select="statement-message[1]"
> mode="wrap"/>
> 
> </xsl:template>
> 
> <xsl:template match="statement-message" mode="wrap">
> 
> 
> <xsl:apply-templates
>
select="following-sibling::*[1][self::statement-message][not(string-length(following-sibling::*[self::statement-message])
>  = 0)][1]" mode="nowrap">
> <xsl:with-param name="parent" select="."/>
> <xsl:with-param name="dotag" select="0"/>
> </xsl:apply-templates>
> 
> <!--
> <xsl:apply-templates
>
select="following-sibling::*[1][self::statement-message]"
> mode="nowrap"/>
> -->
> 
> 
> </xsl:template>
> 
> <xsl:template match="statement-message[. = '']">
> 
> <xsl:value-of select="'here'"/>
> 
> <xsl:apply-templates
>
select="following-sibling::*[1][self::statement-message]"
> mode="wrap"/>
> </xsl:template>
> 
> 
> 
> <xsl:template match="statement-message"
> mode="nowrap">
> <xsl:param name="parent"/>
> <xsl:param name="dotag"/>
> 
> 
> <xsl:choose>
> <xsl:when test="number($dotag) = 0">
> 
> <statement-message>
> <xsl:value-of select="$parent"/>
> <xsl:value-of select="."/>
> 
> <xsl:choose>
> <!--
> <xsl:when
>
test="not(string-length(following-sibling::*[self::statement-message][1])
> =
> 0)">
> -->
> <xsl:when test="not(string-length(.) = 0)">
> 
> 
> <xsl:apply-templates
>
select="following-sibling::*[self::statement-message][not(string-length(following-sibling::*[self::statement-message])
>  = 0)][1]" mode="nowrap">
> <xsl:with-param name="parent" select="."/>
> <xsl:param name="dotag" select="1"/>
> </xsl:apply-templates>
> 
> </xsl:when>
> <xsl:otherwise>
> 
> <xsl:apply-templates select="statement-message"/>
> </xsl:otherwise>
> </xsl:choose>
> 
> </statement-message>
> </xsl:when>
> 
> 
> <xsl:otherwise>
> 
> <xsl:value-of select="."/>
> <xsl:apply-templates
>
select="following-sibling::*[self::statement-message][not(string-length(following-sibling::*[self::statement-message])
>  = 0)][1]" mode="nowrap"/>
> </xsl:otherwise>
> </xsl:choose>
> 
> <xsl:choose>
> <xsl:when
>
test="string-length(following-sibling::*[self::statement-message][1])
> = 0">
> 
> <xsl:apply-templates
>
select="following-sibling::*[1][self::statement-message]"
> mode="wrap"/>
> 
> </xsl:when>
> </xsl:choose>
> 
> 
> 
> <!--
> <xsl:apply-templates
>
select="following-sibling::*[self::statement-message][not(string-length(following-sibling::*[self::statement-message])
>  = 0)][1]" mode="wrap"/>
> -->
> 
> 
> </xsl:template>
> 
> <xsl:template match="statement-message[. = '']">
> 
> <xsl:value-of select="'here'"/>
> 
> <xsl:apply-templates
>
select="following-sibling::*[1][self::statement-message]"
> mode="wrap"/>
> 
> </xsl:template>
> 
> 
> </xsl:stylesheet>
> 
> 
> Hope this helps.
> 
> Cheers,
> prakash
> 
> 
> 
> 
> 
> 
>                                                     
>                                                     
>                              
>                       "Ed Yau"                      
>                                                     
>                              
>                       <eyau@vstrading.         To:  
>    <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>                
>                              
>                       co.uk>                   cc:  
>    (bcc: omprakash.v/Polaris)                       
>                              
>                                               
> Subject: [xsl] Group problem with blank elements    
>                                    
>                       06/30/2005 11:00              
>                                                     
>                              
>                       PM                            
>                                                     
>                              
>                       Please respond                
>                                                     
>                              
>                       to xsl-list                   
>                                                     
>                              
>                                                     
>                                                     
>                              
>                                                     
>                                                     
>                              
> 
> 
> 
> 
> Hiya,
> 
> Having loads of trouble with this.  On the face of
> it a really easy
> problem.
> I have a bunch of elements like so:
> 
> <statement-message>Your account is now seriously in
> arrears.
> To</statement-message>
> 
> <statement-message>avoid further action a payment
> of</statement-message>
> 
> <statement-message>$82.00 is required immediately.
> Any</statement-message>
> 
> <statement-message>purchases will now be
> declined.</statement-message>
> 
> <statement-message>
> </statement-message>
> 
> <statement-message>  More text </statement-message>
> 
> <statement-message>
> </statement-message>
> 
> <statement-message>
> </statement-message>
> 
> <statement-message>
> </statement-message>
> 
> I want to strip out the empty tags and merge
> adjacent elements as
> follows:
> 
> <statement-message> Your account is now seriously in
> arrears. To avoid
> further action a payment of
> 82.00 is required immediately. Any purchases will
> now be
> declined.</statement-message>
> 
> <statement-message>  More text </statement-message>
> 
> My code at the moment is:
> <xsl:for-each-group select="statement-message"
>
group-ending-with="statement-message[string-length(normalize-space(follo
> wing-sibling::statement-message[1]))=0]">
>              <statement-message>
>                          <xsl:value-of select="."/>
>              </statement-message>
> </xsl:for-each-group>
> 
> My understanding of this is that it should start
> grouping from the 1st
> statement message, with the groups ending as soon as
> an empty element is
> reached.  The empty tags at the end would still be
> there, but at least
> it should do the merge.  However, the result looks
> like:
> 
>      <statement-message>Your account is now
> seriously in arrears.
> To</statement-message>
>      <statement-message>
>      </statement-message>
>      <statement-message>  More text
> </statement-message>
>      <statement-message>
>      </statement-message>
>      <statement-message>
>      </statement-message>
>      <statement-message>
>      </statement-message>
> 
> So where am I going wrong?
> 
> Ed
> 
> 
> 
> 
> 
> This e-Mail may contain proprietary and confidential
> information and is sent for the intended
> recipient(s) only. 
> If by an addressing or transmission error this mail
> has been misdirected to you, you are requested to
> delete this mail immediately.
> You are also hereby notified that any use, any form
> of reproduction, dissemination, copying, disclosure,
> modification,
> distribution and/or publication of this e-mail
> message, contents or its attachment other than by
> its intended recipient/s is strictly prohibited.
> 
> Visit Us at http://www.polaris.co.in
> 
> 



		
__________________________________ 
Yahoo! Mail 
Stay connected, organized, and protected. Take the tour: 
http://tour.mail.yahoo.com/mailtour.html 

Current Thread