I'm trying to design an XSLT in order to transform an XML document into another XML document.
The source XML looks something like this:
Expand|Select|Wrap|Line Numbers
- <?xml version="1.0" encoding="UTF-8"?>
- <Orders>
- <Order>
- <OrderHeader>
- <sCustomerNo>116442</sCustomerNo>
- <sOrderNo>8245673</sOrderNo>
- </OrderHeader>
- <OrderRows>
- <OrderRow>
- <sOrderLineNo>1</sOrderLineNo>
- <sArticleNo>102448</sArticleNo>
- <iQuantity>3</iQuantity>
- </OrderRow>
- <OrderRow>
- <sOrderLineNo>2</sOrderLineNo>
- <sArticleNo>102448</sArticleNo>
- <iQuantity>4</iQuantity>
- </OrderRow>
- </OrderRows>
- </Order>
- <Order>
- <OrderHeader>
- <sCustomerNo>116448</sCustomerNo>
- <sOrderNo>8245677</sOrderNo>
- </OrderHeader>
- <OrderRows>
- <OrderRow>
- <sOrderLineNo>1</sOrderLineNo>
- <sArticleNo>102448</sArticleNo>
- <iQuantity>7</iQuantity>
- </OrderRow>
- </OrderRows>
- </Order>
- </Orders>
Expand|Select|Wrap|Line Numbers
- <?xml version="1.0" encoding="utf-8"?>
- <Orders>
- <Order>
- <OrderNumber>8245673</OrderNumber>
- <Customer>116442</Customer>
- <OrderLine>
- <ArticleNumber>102448</ArticleNumber>
- <Quantity>7</Quantity>
- </OrderLine>
- </Order>
- <Order>
- <OrderNumber>8245677</OrderNumber>
- <Customer>116448</Customer>
- <OrderLine>
- <ArticleNumber>102448</ArticleNumber>
- <Quantity>7</Quantity>
- </OrderLine>
- </Order>
- </Orders>
In order to acheive this I´ve found something called the Muenchian method: http://www.jenitennison.com/xslt/gro...muenchian.html
Expand|Select|Wrap|Line Numbers
- <xsl:key name="orderrows-by-articleno" match="OrderRows/OrderRow" use="sArticleNo" />
- ...
- <xsl:for-each select="OrderRows/OrderRow[count(. | key(''''orderrows-by-articleno'''', sArticleNo)[1]) = 1]">
- <xsl:variable name="sArticleNo">
- <xsl:value-of select="sArticleNo"/>
- </xsl:variable>
- <OrderLine>
- <ArticleNumber><xsl:value-of select="sArticleNo" /></ArticleNumber>
- <Quantity><xsl:value-of select="sum(../../OrderRows/OrderRow[sArticleNo = $sArticleNo]/iQuantity)"/></Quantity>
- </OrderLine>
- </xsl:for-each>
Expand|Select|Wrap|Line Numbers
- <?xml version="1.0" encoding="utf-8"?>
- <Orders>
- <Order>
- <OrderNumber>8245673</OrderNumber>
- <Customer>116442</Customer>
- <OrderLine>
- <ArticleNumber>102448</ArticleNumber>
- <Quantity>7</Quantity>
- </OrderLine>
- </Order>
- <Order>
- <OrderNumber>8245677</OrderNumber>
- <Customer>116448</Customer>
- </Order>
- </Orders>