I'm transforming two (or more) RSS docs into one master xml
that I'll be
using to display on our portal. I'm running into an issue
where one of the
rss docs uses a date element called <dc:date> and another
uses <pubdate>.
I'd like to transform them so that the final xml document uses only
<pubdate>.
I've tried a couple of approaches:
<xsl:if test="(name() = pubdate or dc:date)">
There are a few problems with this...
1) The "or" operator is meant to connect two boolean expressions,
so instead of
name() = pubdate or dc:date
you want
name() = pubdate or name() = dc:date
2) pubdate needs to be quoted; otherwise it is interpreted as
"the string value of the child element of . whose name is 'pubdate'"
so you want
name() = 'pubdate' or name() = 'dc:date'
or
self::pubdate or self::dc:date
The latter form has the benefit of doing proper namespace checking.
(Assuming you've declared the dc namespace in your stylesheet.)
Anyone know how I can easily check if it's the <dc:date> or
the <pubdate>
and tranform it to a <pubdate> if it's the <dc:date> (while inside a
<xsl:for-each>)?
You were on the right track...
<xsl:if test="self::pubdate or self::dc:date">
<xsl:element name="pubdate">
<xsl:value-of select="." />
</xsl:element>
</xsl:if>
Lars
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list