Sorry, but this was a cocoon specific issue. The script was working fine as it was. The problem (which got lost thanks to my bad copying and pasting) was not the script, it was with the unexplained warnings (TraxErrorListener) that I got from running the scripts. Is that a bug or is it something illegal that I am doing in my XSLT that would not work in another more stringent parser?

I wish I saw that wiki page earlier, it would have saved me half a day's worth or work.

Cheers.

Jason Johnston wrote:

Kamal Bhatt wrote:


Apologies, I did not see that. Yes, you are right most of those * is not meant to be there. It was rendering right when I pasted it in. I did not realise that is what the browser does. Sorry people, please ignore the unnecessary *. Someone at work worked out that you don't need the node() and * would surfice and seems to fix the problem. I would like to know why it is a problem though..


I'm not sure, but one possibility: node() matches not only elements but any node: attributes, text, comments... so your template would have ended up trying to call local-name() on nodes that don't have a local name. That would explain why changing it to match only elements with * cleared up the problem.

Since this isn't a Cocoon-specific issue, an XSLT mailing list or forum may be a better bet for getting the answer. Or perhaps one specific to the XSLT processor you're using (Xalan?), since it's likely different processors handle these edge cases differently.

What I was trying to do is copy one element into another element and remove unnecessary namespace declarations (as this is meant to be published XML) whilst retaining a specific namespace (the supplier namespace).


There is a page on the Cocoon wiki about stripping extra namespace declarations, as it is a common problem: http://wiki.apache.org/cocoon/RemoveNamespaces


<files>
 <supplier ...>
    ...
 </supplier>
 <customRows>
   ...
 </customRows>
</files>

becomes:

<sup:supplier sup:xmlns="..." xmlns="..." ...>
 ...
 <sup:supplementary>
   <sup:customRows>
   ...
   </sup:customRows>
 </sup:supplementary>
</sup:supplier>

Here is an unadulterated version of the XSLT

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   xmlns:sup="http://www.calypso.net.au/apps/supub/SupplierV1.0";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xmlns="http://www.calypso.net.au/apps/supub/SupplierV1.0";
   >
 <xsl:template match="files">
    <xsl:apply-templates select="sup:supplier"/>
 </xsl:template>
 <xsl:template match="sup:supplier">
   <supplier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
     <xsl:apply-templates select="@*|node()"/>
     <supplementary>
   <xsl:apply-templates select="../customRows"/>
     </supplementary>
   </supplier>
 </xsl:template>

 <xsl:template match="node()>
   <xsl:element name="{local-name()}">
     <xsl:apply-templates select="@*"/>
     <xsl:if test="count(*) = 0">
       <xsl:value-of select="."/>
     </xsl:if>          <xsl:apply-templates select="child::*"/>
   </xsl:element>
 </xsl:template>

 <xsl:template match="@*">
   <xsl:attribute name="{name()}">
     <xsl:value-of select="."/>
   </xsl:attribute>   </xsl:template>
</xsl:stylesheet>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Kamal Bhatt


--
Disclaimer: This email is confidential and may contain privileged information 
for the sole use of the person or business to which it is addressed. If you are 
not the intended recipient, please notify the sender by return e-mail or phone 
as you must not view, disseminate, distribute or copy this email without our 
consent. We do not accept any liability in connection with any computer virus, 
data corruption, incompleteness, or unauthorised amendment of this email. It is 
the sole responsibility of the receiver to scan for viruses before opening.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to