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.. 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). eg:
<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>
Lars Huttar wrote:
Kamal Bhatt wrote:
Hi
I keep getting warnings about TraxErrorListener for line 55 and 64
for the XSLT included at the end of this file. To make life easier
the problem is with the following lines:
<xsl:element name="*{local-name()}*">
and
<xsl:attribute name="*{name()}*">
||
without the curly braces it does not work, but with them I get the
warnings. As the pipelines that reference this are high traffic, I
find the logs files jam packed with these warnings. How can I get rid
of them?
We are using cocoon-2.1.9 on jboss.
Cheers.
<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="*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="[EMAIL PROTECTED]|node()*" />
- <#> <supplementary>
<xsl:apply-templates select="*../customRows*" />
</supplementary>
</supplier>
</xsl:template>
- <#> <xsl:template match="*node()*">
- <#> <xsl:element name="*{local-name()}*">
<xsl:apply-templates select="[EMAIL PROTECTED]" />
- <#> <xsl:if test="*count(*) = 0*">
<xsl:value-of select="*.*" />
</xsl:if>
<xsl:apply-templates select="*child::**" />
</xsl:element>
</xsl:template>
- <#> <xsl:template match="[EMAIL PROTECTED]">
- <#> <xsl:attribute name="*{name()}*">
<xsl:value-of select="*.*" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Please describe what you mean by these asterisks, and we can try to
... OH!!!
I bet you copied and pasted from the browser where these attribute
values were shown in BOLD, or something!
And the bold got translated into asterisks! (+,+)
(Deleting several sentences I wrote above about ill-formed XML element
names.)
OK, looking at your stylesheet afresh...
Your curly brackets look OK, though the templates could be simplified.
Can you tell us in more detail what the warnings say?
Here is a simpler version of your last two templates:
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:if test="not(*)">
<xsl:value-of select="."/>
</xsl:if>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="." />
</xsl:template>
Depending on what you're trying to do, you may find an identity
template useful:
http://www.xmltraining.biz/xsltidentity
HTH,
Lars
---------------------------------------------------------------------
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]