xsl-list
[Top] [All Lists]

Re: Antw: Merging two xml files

2004-01-13 10:30:25
Hi,
You can better send questions to the xsl-list. In this way everybody can
learn from the questions and answers and everyone can answer!

Change (untested):
<xsl:variable name="pin" select="$emps//employee[(_at_)id = $id]/@pincode"/>
<employee>
     <xsl:if test="$pin>
          <xsl:attribute name="pincode">
               <xsl:value-of select="$pin"/>
          </xsl:attribute>
     </xsl:if>
     <!-- copy the child nodes -->
          <xsl:copy-of select="*"/>
         <!-- copy the address -->
         <xsl:copy-of select="$emps//employee[(_at_)id =$id]/address"/>
  </employee>

Variable $pin will test to true if it exists otherwise it will be false.

Cheers,
Agnes



----- Original Message ----- 
From: "Arulraj" <p_arulraj(_at_)yahoo(_dot_)com>
To: <agnes(_dot_)kielen(_at_)home(_dot_)nl>
Sent: Tuesday, January 13, 2004 11:08 AM
Subject: Re: Antw: [xsl] Merging two xml files


Hi Agnes,
 This works fine. I have one more doubt. If I have
pincode attribute in second.xml, then In Ouput should
have <employee pincode=""> otherwise I no need to have
pincode attribute just <employee> is enough.

So I need to check pincode is appear in second XML
then adding it to resultant <employee> element.

If you got an idea!
Please reply me.

Thanking you,
Arul

--- agnes(_dot_)kielen(_at_)home(_dot_)nl wrote:
Hi Arul,

<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
  <xsl:output method="xml" indent="yes"/>
  <!-- load the merge file -->
  <xsl:variable name="emps"
select="document('employeeAddresses.xml')"/>
  <xsl:template match="/">
     <employees>
<xsl:for-each select="employees/employee"> <!--
cache the employee's ID --> <xsl:variable
name="id" select="@id"/> <!-- copy the pincode of
the second XML --> <employee
pincode="{$emps//employee[(_at_)id = $id]/@pincode}">
        <!-- copy the child nodes -->
        <xsl:copy-of select="*"/>
<!-- copy the address -->
        <xsl:copy-of select="$emps//employee[(_at_)id =
$id]/address"/>
    </employee>
   </xsl:for-each>
</employees>
</xsl:template>
</xsl:stylesheet>

I changed the
<xsl:variable name="id"><xsl:value-of
select="@id"/></xsl:variable>
in <xsl:variable name="id" select="@id"/>
This is shorter to write, easier to read and you
don't create a RTF.
Furhtermore I changed child::* in *.

I select the correct nodes from employeeAddress.xml
with the help of the following pattern:
$emps//employee[(_at_)id = $id].
In english this means something like select those
employee from the second file from which the
id-attribute is equal to the current id in the main
xml.


Cheers,
Agnes







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



__________________________________
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
http://hotjobs.sweepstakes.yahoo.com/signingbonus




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



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