You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Donald Ball <ba...@webslingerZ.com> on 2001/04/26 22:30:37 UTC
[c2] bug in trax transformer (xalan)?
hey guys, i'm trying to track down a weird namespace related problem in
c2. i've got an aggregated xml result set that looks something like this:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<w:page
xmlns:xsp-cookie="http://apache.org/xsp/cookie"
xmlns:xsp="http://apache.org/xsp"
xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
xmlns:xspdoc="http://apache.org/cocoon/XSPDoc/v1"
xmlns:esql="http://apache.org/cocoon/SQL/v2"
xmlns:wzi="http://intranet.webslingerZ.com/xml/xsp/v1"
xmlns:xsp-request="http://apache.org/xsp/request"
>
<w:title>Client</w:title>
<w:body>
<clients>
<client>...</client>
...
</clients>
</w:body>
</root>
so underneath the w:body element, there's a clients element with no
namespace. no default namespace is declared. all right so far? so now i
want to apply a stylesheet to transform the clients tree fragment into
elements in the w namespace. so i've got a stylesheet which does just
that:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
version="1.0"
>
<xsl:template match="clients">
<w:table type="data">
<w:title>Clients</w:title>
<xsl:for-each select="client">
<w:row>
<w:cell>
<a href="client?id={id}">
<xsl:value-of select="name"/>
</a>
</w:cell>
</w:row>
</xsl:for-each>
</w:table>
</xsl:template>
<xsl:template match="node()" priority="-2">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
now if i apply the stylesheet by hand using xalan1 or xt, i get what i
expect - a copy of the source xml with the clients fragment transformed
into a w:table fragment. but if i apply the stylesheet in the sitemap:
<map:transform src="style/clients.xsl"/>
i get this:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<w:page
xmlns:xsp-cookie="http://apache.org/xsp/cookie"
xmlns:xsp="http://apache.org/xsp"
xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
xmlns:xspdoc="http://apache.org/cocoon/XSPDoc/v1"
xmlns:esql="http://apache.org/cocoon/SQL/v2"
xmlns:wzi="http://intranet.webslingerZ.com/xml/xsp/v1"
xmlns:xsp-request="http://apache.org/xsp/request"
>
<w:title>Client</w:title>
<w:body>
<clients xmlns="http://intranet.webslingerZ.com/xml/site/v1">
<client>...</client>
...
</clients>
</w:body>
</root>
for the _life_ of me, i cannot figure out what's going wrong. it's as if
the stylesheet transformer is seeing the incoming xml document as having a
default namespace of "http://intranet.webslingerZ.com/xml/site/v1". if i
modify the stylesheet to operate on the clients elements if they belong to
that namespace:
<xsl:template match="w:clients">
<w:table type="data">
<w:title>Clients</w:title>
<xsl:for-each select="w:client">
<w:row>
<w:cell>
<a href="client?id={w:id}">
<xsl:value-of select="w:name"/>
</a>
</w:cell>
</w:row>
</xsl:for-each>
</w:table>
</xsl:template>
i get the results i expect, but it should not be the case that the input
clients element belongs to any namespace, much less the w: one. any ideas,
folks?
- donald
---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org
Re: [c2] bug in trax transformer (xalan)?
Posted by Davanum Srinivas <di...@yahoo.com>.
Donald,
I learnt this trick a couple of days back from Giacomo. Try adding a
<map:transform type="log"/> before your <map:transform src="style/clients.xsl"/> and tail the
cocoon.log to see the SAX input to the stylesheet. This will help in diagnosing problems in the
SAX input to trax transformer.
Thanks,
dims
--- Donald Ball <ba...@webslingerZ.com> wrote:
> hey guys, i'm trying to track down a weird namespace related problem in
> c2. i've got an aggregated xml result set that looks something like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
> <w:page
> xmlns:xsp-cookie="http://apache.org/xsp/cookie"
> xmlns:xsp="http://apache.org/xsp"
> xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
> xmlns:xspdoc="http://apache.org/cocoon/XSPDoc/v1"
> xmlns:esql="http://apache.org/cocoon/SQL/v2"
> xmlns:wzi="http://intranet.webslingerZ.com/xml/xsp/v1"
> xmlns:xsp-request="http://apache.org/xsp/request"
> >
> <w:title>Client</w:title>
> <w:body>
> <clients>
> <client>...</client>
> ...
> </clients>
> </w:body>
> </root>
>
> so underneath the w:body element, there's a clients element with no
> namespace. no default namespace is declared. all right so far? so now i
> want to apply a stylesheet to transform the clients tree fragment into
> elements in the w namespace. so i've got a stylesheet which does just
> that:
>
> <xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
> version="1.0"
> >
>
> <xsl:template match="clients">
> <w:table type="data">
> <w:title>Clients</w:title>
> <xsl:for-each select="client">
> <w:row>
> <w:cell>
> <a href="client?id={id}">
> <xsl:value-of select="name"/>
> </a>
> </w:cell>
> </w:row>
> </xsl:for-each>
> </w:table>
> </xsl:template>
>
> <xsl:template match="node()" priority="-2">
> <xsl:copy>
> <xsl:apply-templates select="node()"/>
> </xsl:copy>
> </xsl:template>
>
> </xsl:stylesheet>
>
> now if i apply the stylesheet by hand using xalan1 or xt, i get what i
> expect - a copy of the source xml with the clients fragment transformed
> into a w:table fragment. but if i apply the stylesheet in the sitemap:
>
> <map:transform src="style/clients.xsl"/>
>
> i get this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <root>
> <w:page
> xmlns:xsp-cookie="http://apache.org/xsp/cookie"
> xmlns:xsp="http://apache.org/xsp"
> xmlns:w="http://intranet.webslingerZ.com/xml/site/v1"
> xmlns:xspdoc="http://apache.org/cocoon/XSPDoc/v1"
> xmlns:esql="http://apache.org/cocoon/SQL/v2"
> xmlns:wzi="http://intranet.webslingerZ.com/xml/xsp/v1"
> xmlns:xsp-request="http://apache.org/xsp/request"
> >
> <w:title>Client</w:title>
> <w:body>
> <clients xmlns="http://intranet.webslingerZ.com/xml/site/v1">
> <client>...</client>
> ...
> </clients>
> </w:body>
> </root>
>
> for the _life_ of me, i cannot figure out what's going wrong. it's as if
> the stylesheet transformer is seeing the incoming xml document as having a
> default namespace of "http://intranet.webslingerZ.com/xml/site/v1". if i
> modify the stylesheet to operate on the clients elements if they belong to
> that namespace:
>
> <xsl:template match="w:clients">
> <w:table type="data">
> <w:title>Clients</w:title>
> <xsl:for-each select="w:client">
> <w:row>
> <w:cell>
> <a href="client?id={w:id}">
> <xsl:value-of select="w:name"/>
> </a>
> </w:cell>
> </w:row>
> </xsl:for-each>
> </w:table>
> </xsl:template>
>
> i get the results i expect, but it should not be the case that the input
> clients element belongs to any namespace, much less the w: one. any ideas,
> folks?
>
> - donald
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
> For additional commands, email: cocoon-dev-help@xml.apache.org
>
=====
Davanum Srinivas, JNI-FAQ Manager
http://www.jGuru.com/faq/JNI
__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
http://auctions.yahoo.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org