xsl-list
[Top] [All Lists]

Re: [xsl] Mapping from two sources (~ inner join in DB)

2010-10-03 16:44:05
Thank you Ken. I see that "key" is doing the trick of inner join replacing 
xsl:if>


--- On Sun, 10/3/10, G. Ken Holman <gkholman(_at_)CraneSoftwrights(_dot_)com> 
wrote:

From: G. Ken Holman <gkholman(_at_)CraneSoftwrights(_dot_)com>
Subject: Re: [xsl] Mapping from two sources (~ inner join in DB)
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Sunday, October 3, 2010, 3:26 PM
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>
--~--




      

--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>