This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: merging generic elements in a parent-child relationship Part II
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 27 Jun 2002 11:41:53 -0700 (PDT)
- Subject: [xsl] Re: merging generic elements in a parent-child relationship Part II
- Reply-to: xsl-list at lists dot mulberrytech dot com
--- "Matias Woloski" <woloski at sion dot com> wrote:
>
> Hi guys!
> thanks for the help and the stylesheets :)
>
> Right now I've decided to go for the most simple one and began to
> make
> some
> modifications to suit my needs
>
> The XML is this one:
> <root>
> <Persona id="abc" idCountry="1"/>
> <Persona id="abcd" idCountry="1"/>
> <b id="b1" idPersona="abc"/>
> <b id="b2" idPersona="abc"/>
> <b id="b3" idPersona="abcd"/>
> <c id="c1" idb="b1"/>
> </root>
>
> This is the stylesheet I have. Note the TopElement param. This is
> something
> I'm gonna know.
>
> 1 <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 2 <xsl:output method="xml" version="1.0" encoding="UTF-8"
> indent="yes"/>
> 3 <xsl:param name="TopElement" select="Persona" />
> 4 <xsl:template match="root">
> 5 <root>
> 6 <xsl:apply-templates select="//Persona"/>
> 7 </root>
> 8 </xsl:template>
> 9
> 10 <xsl:template match="*">
> 11 <xsl:element name="{name()}">
> 12 <xsl:copy-of select="@*"/>
> 13 <xsl:apply-templates select="../*[@idPersona=current()/@id or
> @idb=current()/@id]"/>
> 14 </xsl:element>
> 15 </xsl:template>
> 16 </xsl:stylesheet>
>
> There are some things I would like to know
> 1. Line 6. How can I select based on the TopElement param. I would
> like
> to
> do something like
> <xsl:apply-templates select="//$TopElement" />
<xsl:apply-templates select=".//*[name() = $TopElement]" />
>
> 2. Line 13. I'd like to make this on runtime. I mean, instead of
> having
> @idPersona I'd like to have @concat('id',name()). obviously this
> cannot
> be
> done. Is this possible to do? I've read the Things XSL can't do on
> http://www.dpawson.co.uk and there is one that maybe answer my
> questions
>
> "...There is no way in XSLT of constructing XPath expressions (e.g.
> variable
> references) at run-time..."
>
> So if this is true, I'm looking for a workaround on this...
>
The attribute you need to specify is:
@*[name() = concat('id', name(..))]
Cheers,
Dimitre Novatchev.
__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list