|
Subject: RE: [xsl] Combining two node Sets into one From: "Williamson, Chris" <cwilliamson@xxxxxxxxx> Date: Fri, 1 Apr 2005 12:47:01 -0500 |
Thanks Wendell.
Everything seems to be working good. (except the sort.. But I think I can
figure that out) However, when I assign the value to a variable and try to
use it later in my stylesheet..as I'm sure you know.. you cannot use most
xpath expression on a tree frag.
Not fully understanding how your example actually works I can't figure out
how to wrap it so that the data creates my desired table. If they would
only let me redo the xml. *sigh*.
Here is my desired table.. (-) is a refund type and the other is a disp
type.
Program amount processdate
Abc 500 1/1/2005
(-)200 2/25/2005
Def 1000 3/5/2005
500 5/5/2005
(-)500 7/9/2005
Thanks for the help.. If you have time can you also explain at a high level
how wrapping an expression in an xml tag works to generate the combined
nodes.. Ie..
<xsl:template match="Damount">
<Tamount> <!---xml tag
<xsl:apply-templates/>
</Tamount>
</xsl:template>
Thanks again.
Chris
-----Original Message-----
From: Wendell Piez [mailto:wapiez@xxxxxxxxxxxxxxxx]
Sent: Thursday, March 31, 2005 5:38 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] 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
======================================================================
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] xsl:if, tim | Thread | RE: [xsl] Combining two node Sets i, Wendell Piez |
| RE: [xsl] Keys off of variable xml , Michael Kay | Date | RE: [xsl] Testing 2 XML documents f, Mukul Gandhi |
| Month |