|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Combining two node Sets into one
I solved the problem by using..
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"
version="1.0">
...
<!-- Now we can convert result tree fragment back to node-set -->
<xsl:value-of select="exsl:node-set($author)/email"/>
But how does this effect the output for browsers such as mozilla, netscape,
and IE? Will the browsers act differently?
-----Original Message-----
From: Wendell Piez [mailto:wapiez@xxxxxxxxxxxxxxxx]
Sent: Thursday, March 31, 2005 5:38 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: Combining two node Sets into one
Chris,
At 03:27 PM 3/31/2005, you wrote:
>Is there any possible way to combine two node sets into one single node
>set (assign to variable?) and then add an extra childnode to the set
>based on which parent node the new node came from.
Sure, this is a fairly straightforward "plain vanilla" XML->XML
transformation, maybe with a few sprinkles....
You'll need at some point to select all the Disbs and Refunds elements
together -- that's where you'll do your sorting by date, and also where
you'll create the wrapper for the entire output:
<xsl:template match="/">
<Trans>
<xsl:apply-templates select="//Disbs | //Refunds">
<xsl:sort select="DisbDetail/Ddate | RefDetail/Rdate"/>
</xsl:apply-templates>
</Trans>
Now you need templates to match the Disbs and Refunds elements, and for
their descendants in turn (which will map to your new elements). I'll just
show you a couple of them:
<xsl:template match="Disbs">
<xsl:apply-templates/>
<!-- nothing to be done here except select and process our
children, which will map -->
</xsl:template>
<xsl:template match="DisbDetail">
<!-- maps to TranDetail -->
<TranDetail>
<!-- but here we need to announce our type: -->
<Ttype>dis</Ttype>
<xsl:apply-templates/>
<!-- descends another level -->
</TranDetail>
</xsl:template>
<xsl:template match="Damount">
<Tamount>
<xsl:apply-templates/>
</Tamount>
</xsl:template>
and so forth.
Once you've got all these templates, you'll find many of them are very
similar ... for example you'll have
<xsl:template match="RefDetail">
<!-- maps to TranDetail, and descends another level -->
<TranDetail>
<!-- but here we need to announce our type: -->
<Ttype>refund</Ttype>
<xsl:apply-templates/>
</TranDetail>
</xsl:template>
... notice this is almost exactly like the template matching DisbDetail.
(The one matching Ramount will be exactly like the one matching Damount.)
So they can be combined:
<xsl:template match="DisbDetail | RefDetail">
<!-- maps to TranDetail, and descends another level -->
<TranDetail>
<!-- but here we need to announce our type: -->
<Ttype>
<xsl:choose>
<xsl:when test="self::DisbDetail">dis</xsl:when>
<xsl:otherwise>refund</xsl:otherwise>
</xsl:choose>
</Ttype>
<xsl:apply-templates/>
</TranDetail>
</xsl:template>
Your entire stylesheet will have just a few fairly simple templates.
I hope that helps! If anything here is mysterious to a newbie, my guess
it'll be about how templates match and how xsl:apply-templates works ...
the famous XSLT processing model.
Cheers,
Wendell
======================================================================
Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








