Subject: AW: RSS 2.0 to RSS 1.0 XSLT problem in Luminis 3.3
From: "Huditsch, Roman \(LNG-VIE\)" <Roman.Huditsch@xxxxxxxxxxxxx>
Date: Wed, 12 Jul 2006 18:21:55 +0200
|
Hi Seth,
You are getting transformation, because you are mixing up the XSL
instructions (although the error message seems a bit odd).
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
You need to declare the namespace for the rdf prefix in your
<xsl:stylesheet>, too, since you need it in nearly all of your
templates.
> <xsl:template match="rss">
> <rdf:RDF
> xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
> xmlns="http://purl.org/rss/1.0/">
>
> <xsl:template match="channel">
> <channel>
> <xsl:attribute name="rdf:about"><xsl:value-of
> select="link"/></xsl:attribute>
> <title><xsl:value-of select="title"/></title>
> <description><xsl:value-of select="description"/></description>
> <image><xsl:attribute name="rdf:resource"><xsl:value-of
> select="image"/></xsl:attribute></image>
> <items><rdf:Seq>
> <xsl:for-each select="item">
> <rdf:li>
> <xsl:attribute name="rdf:resource"><xsl:value-of
> select="link"/></xsl:attribute>
> </rdf:li>
> </xsl:for-each>
> </rdf:Seq></items>
> <textinput><xsl:value-of select="textinput"/></textinput>
> </channel>
> </xsl:template>
Templates can't be nested in XSLT. If you want to apply templates for
other nodes in an template, use <xsl:apply-templates> instead.
<xsl:template> must be a child element of <xsl:stylesheet>.
> <xsl:transform match="channel/image">
> <image>
> <xsl:attribute name="rdf:resource"><xsl:value-of
> select="url"/></xsl:attribute>
> <title><xsl:value-of select="image/title"/></title>
> <url><xsl:value-of select="image/url"/></url>
> <link><xsl:value-of select="image/link"/></link>
> </image>
> </xsl:transform>
<xsl:transform> is a synonym for <xsl:stylesheet> and therefore
completely wrong here. You need to change this to be an <xsl:template
...> and move it one level up in your hierarchy. You should also include
an <xsl:apply-template> in your stylesheet invoking this template...
> <xsl:for-each select="channel/item">
> <item>
> <xsl:attribute name="rdf:about"><xsl:value-of
> select="link"/></xsl:attribute>
> <title><xsl:value-of select="title"/></title>
> <link><xsl:value-of select="link"/></link>
> <description><xsl:value-of
select="description"/></description>
> </item>
> </xsl:for-each>
I think you should better include this part somewhere in your channel
template...
> <xsl:transform match="channel/textinput">
> <textinput>
> <xsl:attribute name="rdf:about"><xsl:value-of
> select="url"/></xsl:attribute>
> <title><xsl:value-of select="title"/></title>
> <description><xsl:value-of
select="description"/></description>
> <link><xsl:value-of select="link"/></link>
> </textinput>
> </xsl:transform>
This template needs to be under <xsl:stylesheet> as well.
> </rdf:RDF>
> </xsl:template>
>
> </xsl:stylesheet>
If your source document uses a namespace, you need to take that into
account, too.
I didn't have an appropriate RSS 2.0 document at hand, so I can't give
you more detailed information. If you could provide a simple input
document, I can give you an XSLT doing the job.
I hope this helps.
best regards,
Roman
|