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]