BizTalk Server General - Mapping Help needed

This is Interesting: Free IT Magazines  
Home > Archive > BizTalk Server General > May 2006 > Mapping Help needed





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Mapping Help needed
Sukesh Shetty

2006-04-28, 1:14 pm

Hi all,

Need help in a following map... the source is

<ns0:Orders xmlns:ns0="http://SchemasPart1.Source">
<Order>
<OrderNumber>1</OrderNumber>
<Amount>100</Amount>
</Order>
<Order>
<OrderNumber>1</OrderNumber>
<Amount>200</Amount>
</Order>
<Order>
<OrderNumber>1</OrderNumber>
<Amount>300</Amount>
</Order>
<Order>
<OrderNumber>2</OrderNumber>
<Amount>400</Amount>
</Order>
<Order>
<OrderNumber>2</OrderNumber>
<Amount>500</Amount>
</Order>
<Order>
<OrderNumber>3</OrderNumber>
<Amount>600</Amount>
</Order>
<Order>
<OrderNumber>3</OrderNumber>
<Amount>700</Amount>
</Order>
<Order>
<OrderNumber>3</OrderNumber>
<Amount>800</Amount>
</Order>
<OrderDetails>
<Productname>222</Productname>
<Productnumber>4444</Productnumber>
</OrderDetails>
</ns0:Orders>

And the output should be

<ns0:Orders xmlns:ns0="http://AddNode.Schema1">
<Order>
<OrderNumber>1</OrderNumber>
<Amount>600</Amount>
</Order>
<Order>
<OrderNumber>2</OrderNumber>
<Amount>900</Amount>
</Order>
<Order>
<OrderNumber>3</OrderNumber>
<Amount>1400</Amount>
</Order>
<OrderDetails>
<Productname>222</Productname>
<Productnumber>4444</Productnumber>
</OrderDetails>
</ns0:Orders>

I tried writing XSLT call template and inline C# code to do so.. but could
not get thru it.

Any help would be appreciated.

Greg Forsythe

2006-04-29, 7:17 am

You can do this with a custom XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl s0" version="1.0"
xmlns:s0="http://SchemasPart1.Source"
xmlns:ns0="http://AddNode.Schema1">
<xsl:output omit-xml-declaration="yes" version="1.0" method="xml" />
<xsl:key name="orderkey" match="/s0:Orders/Order" use="OrderNumber"/>
<xsl:template match="/">
<xsl:apply-templates select="/s0:Orders" />
</xsl:template>
<xsl:template match="/s0:Orders">
<ns0:Orders>
<xsl:for-each select="Order">
<xsl:variable name="group" select="key('orderkey', OrderNumber)"/>
<xsl:if test="generate-id($group[1]) = generate-id()">
<Order>
<OrderNumber><xsl:value-of select="OrderNumber" /></OrderNumber>
<Amount><xsl:value-of select="sum($group/Amount)"/></Amount>
</Order>
</xsl:if>
</xsl:for-each>
<OrderDetails>
<Productname>
<xsl:value-of select="OrderDetails/Productname"/>
</Productname>
<Productnumber>
<xsl:value-of select="OrderDetails/Productnumber"/>
</Productnumber>
</OrderDetails>
</ns0:Orders>
</xsl:template>
</xsl:stylesheet>

Greg

"Sukesh Shetty" <SukeshShetty@discussions.microsoft.com> wrote in message
news:E2A41AD8-F394-43B1-835E-B1726CAFC469@microsoft.com...
> Hi all,
>
> Need help in a following map... the source is
>
> <ns0:Orders xmlns:ns0="http://SchemasPart1.Source">
> <Order>
> <OrderNumber>1</OrderNumber>
> <Amount>100</Amount>
> </Order>
> <Order>
> <OrderNumber>1</OrderNumber>
> <Amount>200</Amount>
> </Order>
> <Order>
> <OrderNumber>1</OrderNumber>
> <Amount>300</Amount>
> </Order>
> <Order>
> <OrderNumber>2</OrderNumber>
> <Amount>400</Amount>
> </Order>
> <Order>
> <OrderNumber>2</OrderNumber>
> <Amount>500</Amount>
> </Order>
> <Order>
> <OrderNumber>3</OrderNumber>
> <Amount>600</Amount>
> </Order>
> <Order>
> <OrderNumber>3</OrderNumber>
> <Amount>700</Amount>
> </Order>
> <Order>
> <OrderNumber>3</OrderNumber>
> <Amount>800</Amount>
> </Order>
> <OrderDetails>
> <Productname>222</Productname>
> <Productnumber>4444</Productnumber>
> </OrderDetails>
> </ns0:Orders>
>
> And the output should be
>
> <ns0:Orders xmlns:ns0="http://AddNode.Schema1">
> <Order>
> <OrderNumber>1</OrderNumber>
> <Amount>600</Amount>
> </Order>
> <Order>
> <OrderNumber>2</OrderNumber>
> <Amount>900</Amount>
> </Order>
> <Order>
> <OrderNumber>3</OrderNumber>
> <Amount>1400</Amount>
> </Order>
> <OrderDetails>
> <Productname>222</Productname>
> <Productnumber>4444</Productnumber>
> </OrderDetails>
> </ns0:Orders>
>
> I tried writing XSLT call template and inline C# code to do so.. but could
> not get thru it.
>
> Any help would be appreciated.
>



Sukesh Shetty

2006-05-02, 1:19 am

Thanks Greg, Works very well for me. Great Help.

Sukesh.

"Greg Forsythe" wrote:

> You can do this with a custom XSLT:
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:msxsl="urn:schemas-microsoft-com:xslt"
> exclude-result-prefixes="msxsl s0" version="1.0"
> xmlns:s0="http://SchemasPart1.Source"
> xmlns:ns0="http://AddNode.Schema1">
> <xsl:output omit-xml-declaration="yes" version="1.0" method="xml" />
> <xsl:key name="orderkey" match="/s0:Orders/Order" use="OrderNumber"/>
> <xsl:template match="/">
> <xsl:apply-templates select="/s0:Orders" />
> </xsl:template>
> <xsl:template match="/s0:Orders">
> <ns0:Orders>
> <xsl:for-each select="Order">
> <xsl:variable name="group" select="key('orderkey', OrderNumber)"/>
> <xsl:if test="generate-id($group[1]) = generate-id()">
> <Order>
> <OrderNumber><xsl:value-of select="OrderNumber" /></OrderNumber>
> <Amount><xsl:value-of select="sum($group/Amount)"/></Amount>
> </Order>
> </xsl:if>
> </xsl:for-each>
> <OrderDetails>
> <Productname>
> <xsl:value-of select="OrderDetails/Productname"/>
> </Productname>
> <Productnumber>
> <xsl:value-of select="OrderDetails/Productnumber"/>
> </Productnumber>
> </OrderDetails>
> </ns0:Orders>
> </xsl:template>
> </xsl:stylesheet>
>
> Greg
>
> "Sukesh Shetty" <SukeshShetty@discussions.microsoft.com> wrote in message
> news:E2A41AD8-F394-43B1-835E-B1726CAFC469@microsoft.com...
>
>
>

Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com