Subject: Re: [xsl] Mapping from two sources From: Martin Honnen <Martin.Honnen@xxxxxx> Date: Sun, 03 Oct 2010 13:49:34 +0200 |
Thank you for your answers.
But the solution returns only elements from Doc1, I need element of Doc2 if doc1.OLN = doc2.OLN ======== Problem
I need to have two sources:
input1 and input2.
input1: <?xml version="1.0" encoding="ISO-8859-1"?> <Order> <OrderLine> <OLN>1</OLN> <Fname>aa</Fname> </OrderLine> <OrderLine> <OLN>2</OLN> <Fname>bb</Fname> </OrderLine> </Order>
input2: <?xml version="1.0" encoding="ISO-8859-1"?> <POOrder> <POOrderLine> <OLN>1</OLN> <ID>123</ID> <LName>aa</LName> </POOrderLine> <POOrderLine> <OLN>2</OLN> <ID>324</ID> <LName>bb</LName> </POOrderLine> <POOrderLine> <OLN>3</OLN> <ID>456</ID> <LName>bb</LName> </POOrderLine> </POOrder>
I need the output from both sources combined. Please note that first two elements are coming from input1 and thrid element is from input2. What is the optimal way of doing this?
<?xml version="1.0" encoding="ISO-8859-1"?> <OrderResponse> <Oline> <OLN>1</OLN> <Fname>aa</Fname> <ID>123</ID> </Oline> <Oline> <OLN>2</OLN> <Fname>bb</Fname> <ID>324</ID> </Oline> </OrderResponse> =====
Solution proposed:
<xsl:for-each-group select="$doc1//OrderLine, $doc2//POOrderline" group-by="OLN"> <Oline> <OLN><xsl:value-of select="current-grouping-key()"></OLN> <xsl:copy-of select="current-group()/(FName, ID)"/> </Oline> </xsl:for-each-group>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:param name="doc2Url" as="xs:string" select="'input2.xml'"/> <xsl:variable name="doc2" select="doc($doc2Url)"/>
<xsl:template match="/"> <OrderResponse> <xsl:for-each-group select="$doc1//OrderLine, $doc2//POOrderLine" group-by="OLN"> <Oline> <OLN><xsl:value-of select="current-grouping-key()"/></OLN> <xsl:copy-of select="current-group()/(Fname, ID)"/> </Oline> </xsl:for-each-group> </OrderResponse> </xsl:template>
<OrderResponse> <Oline> <OLN>1</OLN> <Fname>aa</Fname> <ID>123</ID> </Oline> <Oline> <OLN>2</OLN> <Fname>bb</Fname> <ID>324</ID> </Oline> <Oline> <OLN>3</OLN> <ID>456</ID> </Oline> </OrderResponse>
Martin Honnen http://msmvps.com/blogs/martin_honnen/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Mapping from two sources, sudheshna iyer | Thread | Re: [xsl] Mapping from two sources, sudheshna iyer |
Re: [xsl] Mapping from two sources, sudheshna iyer | Date | [xsl] How do I pass params from <xs, sudheshna iyer |
Month |