xsl-list
[Top] [All Lists]

RE: RE: Join XMLs with XLST with ralative data

2003-06-09 08:31:07
Hi

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Mangesh Kakade
Sent: Monday, June 09, 2003 11:29 AM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE:RE: [xsl] Join XMLs with XLST with ralative data 


Hi Jarno and all Gurus ,
Thanks for the reply ...earlier i was in digest list
now i am in daily-list..
I have modified my xslt as suggested but still it is
not working properly so the out put with the two xml s
i.e.
22.xml 
<STKAVAILABLE>
      <STKMAST Alias="01" STKCODE="31" STKDESC="FANTA ">
              <STKDESC IndexID="5017"/>
      </STKMAST>
      <STKMAST Alias="01" STKCODE="30" STKDESC="PEPSI">
              <STKDESC IndexID="5017"/>
      </STKMAST>
....
</STKAVAILABLE>
buy22.xml
<buyermaster>
      <name id="a001" deptid="01">
              <bstkcode>31</bstkcode>
      </name>
      <name id="a010">
              <bstkcode>40</bstkcode>
      </name>
      <name id="a003" deptid="10">
              <bstkcode>31</bstkcode>
              <bstkcode>20</bstkcode>
      </name>
</buyermaster>

And out put I want is ....
< tran>
      <stock>
              <stockcode>31</stockcode>
              <name id="a001" deptid="01">
              <name id="a003" deptid="10">
      </stock>
      <stock>
              <stockcode>30</stockcode>
<name id="a010">
      </stock>
...and so on if stock code from 22.xml matches
bstkcode from buy22.xml
</tran>

(...)

Try this:
 <xsl:template match="STKAVAILABLE">
  <tran>
   <xsl:apply-templates/>
  </tran>
 </xsl:template>
 
 <xsl:template match="STKMAST">
  <stock>
   <stockcode><xsl:value-of select="@STKCODE"/></stockcode>
   <xsl:apply-templates
select="document('buy22.xml')/buyermaster/name[bstkcode=current()/@STKCODE]"
/>
  </stock>
 </xsl:template>
 
 <xsl:template match="name">
  <xsl:copy>
   <xsl:copy-of select="@*"/>
  </xsl:copy>
 </xsl:template>


When applied to 22.xml produces the expected result

so based on suggestion I have modified my xslt to : 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
      <xsl:key name="rows-bstkcode" match="name"
use="bstkcode"/>
      <xsl:variable name="x_22"
select="document('22.xml')"/>
      <xsl:variable name="buy22"
select="document('buy22.xml')"/>
      <xsl:template match="/">
              <tran>
                   <xsl:for-each
select="$x_22/STKAVAILABLE/STKMAST">
                    <xsl:variable name="STKCODE1"
select="@STKCODE"/>
                      <xsl:for-each select="$buy22/buyermaster">
                         <stock>
                                <stockcode> <xsl:value-of 
select="$STKCODE1" /></stockcode>
                            <xsl:for-each
select="key('rows-bstkcode',$STKCODE1)">
                                    <xsl:copy>                
                                                              
      <xsl:copy-of
select="bstkcode"/>

Here you probably want <xsl:copy-of select="@*"/> instead.

                                     </xsl:copy>
                                             </xsl:for-each>
                             </stock>
                       </xsl:for-each>
                    </xsl:for-each>
              </tran>
      </xsl:template>
</xsl:stylesheet>

but out put I am getting still is :
<?xml version="1.0" encoding="UTF-8" ?> 
<tran>
<stock>
 <stockcode>31</stockcode> 
       </stock>
<stock>
               <stockcode>30</stockcode> 
 </stock>
 <stock>
              <stockcode>32</stockcode> 
       </stock>
</tran>

(...)

Your code should work, it worked with msxml3



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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