|
Subject: Re: [xsl] XSL Trnasfromation - Is it possible to do a bottom up transformation? From: "Raghu Narayan Koratagere" <raghu.k.n@xxxxxxxxx> Date: Mon, 19 Nov 2007 16:01:31 +0530 |
Micheal,
To clarify, here are the source and example of transformed xmls:
Source Tree:
=========
<orderline>
<linenum>1</linenum>
<productName>Computer</productName>
<netPrice>100</netPrice>
<itemTypeCode>3</itemTypeCode>
<quantity>1</quantity>
<orderline>
<linenum>1.1</linenum>
<productName>CPU</productName>
<netPrice>100</netPrice>
<itemTypeCode>3</itemTypeCode>
<quantity>2</quantity>
<orderline>
<linenum>1.1.1</linenum>
<productName>Mother Board</productName>
<netPrice>100</netPrice>
<itemTypeCode>2</itemTypeCode>
<quantity>2</quantity>
</orderline>
<orderline>
<linenum>1.1.2</linenum>
<productName>Processor</productName>
<netPrice>200</netPrice>
<itemTypeCode>2</itemTypeCode>
<quantity>2</quantity>
</orderline>
</orderline>
<orderline>
<linenum>2</linenum>
<productName>Table</productName>
<netPrice>100</netPrice>
<itemTypeCode>2</itemTypeCode>
<quantity>1</quantity>
</orderline>
<orderline>
<linenum>3</linenum>
<productName>UPS</productName>
<netPrice>100</netPrice>
<itemTypeCode>1</itemTypeCode>
<quantity>1</quantity>
</orderline>
</orderline>
Transformed Tree:
=============
<orderline>
<linenum>1</linenum>
<productName>Computer</productName>
<netPrice>100</netPrice>
<itemTypeCode>3</itemTypeCode>
<unitPrice>350</unitPrice> <!-- 150+100+100=350 -->
<quantity>1</quantity>
<orderline>
<linenum>1.1</linenum>
<productName>CPU</productName>
<netPrice>100</netPrice>
<itemTypeCode>3</itemTypeCode>
<unitPrice>150</unitPrice> <!-- 50+100=150 -->
<quantity>2</quantity>
<orderline>
<linenum>1.1.1</linenum>
<productName>Mother Board</productName>
<netPrice>100</netPrice>
<itemTypeCode>2</itemTypeCode>
<unitPrice>50</unitPrice> <!-- 100/2=50 -->
<quantity>2</quantity>
</orderline>
<orderline>
<linenum>1.1.2</linenum>
<productName>Processor</productName>
<netPrice>200</netPrice>
<itemTypeCode>2</itemTypeCode>
<unitPrice>100</unitPrice> <!-- 200/2=100 -->
<quantity>2</quantity>
</orderline>
</orderline>
<orderline>
<linenum>2</linenum>
<productName>Table</productName>
<netPrice>100</netPrice>
<itemTypeCode>2</itemTypeCode>
<unitPrice>100</unitPrice> <!-- 100/1=100 -->
<quantity>1</quantity>
</orderline>
<orderline>
<linenum>3</linenum>
<productName>UPS</productName>
<netPrice>100</netPrice>
<itemTypeCode>1</itemTypeCode>
<unitPrice>100</unitPrice> <!-- 100/1=100 -->
<quantity>1</quantity>
</orderline>
</orderline>
Issue:
====
When the template matches line with LineNumber 1, the UnitPrice for
LineNumber 1.1, 2, 3 are not yet know. So what values will the
function take to calculate?
I have not tried using the below rule, will try :
<xsl:template match="unitPrice[../itemTypeCode = '3']">
<xsl:copy><xsl:value-of select="sum(../unitPrice[1] div
../quantity[1])" /></xsl:copy>
</xsl:template>
Thanks,
Raghu
On 11/19/07, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>
> > The problem is here you are transforming top down.
>
> I don't understand your fixation with these terms bottom-up and top-down.
> Think functionally: x is a function of y. And it really doesn't matter
> whether a transformation is top-down, bottom-up, outside-in, or inside-out,
> so long as it produces the right answer.
>
> If Abel's solution produces the wrong answer then you need to explain the
> requirement more clearly. Sample input and output is often useful if it's
> difficult to explain it in clear English.
>
> Michael Kay
> http://www.saxonica.com/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] XSL Trnasfromation - Is i, Michael Kay | Thread | RE: [xsl] XSL Trnasfromation - Is i, Michael Kay |
| RE: [xsl] XSL Trnasfromation - Is i, Michael Kay | Date | RE: [xsl] XSL Trnasfromation - Is i, Michael Kay |
| Month |