At 2010-10-03 11:56 -0700, sudheshna iyer wrote:
For the below question, I got the answers from you using
<xsl:for-each-group>. But my version of XSLT is not supporting
xsl:for-each-group.
Then it must be XSLT 1.0.
Is there a different way of implementing this?
Please find an XSLT 1.0 solution below that generates the output you specify.
I hope this helps.
. . . . . . . . Ken
p.s. Which order/order-response vocabularies are you using? Have you
considered using the OASIS Universal Business Language (UBL) for such
business documents?
http://docs.oasis-open.org/ubl/os-UBL-2.0/UBL-2.0.html
http://docs.oasis-open.org/ubl/UBL-2.0-update.html
~/t/ftemp $ cat input1.xml
<?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>
~/t/ftemp $ cat input2.xml
<?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>
~/t/ftemp $ cat innerjoin.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:key name="order-line-by-number" match="*[OLN]" use="OLN"/>
<xsl:template match="/">
<xsl:variable name="input1" select="document('input1.xml')"/>
<xsl:variable name="input2" select="document('input2.xml')"/>
<OrderResponse>
<!--walk each order line-->
<xsl:for-each select="$input1/Order/OrderLine">
<xsl:variable name="input1line" select="."/>
<!--change context to the other file-->
<xsl:for-each select="$input2">
<!--act only on the lines of equal line number-->
<xsl:for-each select="key('order-line-by-number',$input1line/OLN)">
<!--join the information from both files-->
<Oline>
<xsl:copy-of select="OLN"/>
<xsl:copy-of select="$input1line/Fname"/>
<xsl:copy-of select="ID"/>
</Oline>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</OrderResponse>
</xsl:template>
</xsl:stylesheet>
~/t/ftemp $ xslt innerjoin.xsl innerjoin.xsl
<?xml version="1.0" encoding="utf-8"?>
<OrderResponse>
<Oline>
<OLN>1</OLN>
<Fname>aa</Fname>
<ID>123</ID>
</Oline>
<Oline>
<OLN>2</OLN>
<Fname>bb</Fname>
<ID>324</ID>
</Oline>
</OrderResponse>~/t/ftemp $
<?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>
--
XSLT/XQuery training: after http://XMLPrague.cz 2011-03-28/04-01
Vote for your XML training: http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--