|
Subject: [xsl] Merging Two Files and Removing Duplicate Nodes From: Dendler James A <dendler.ja@xxxxxxxxxxx> Date: Fri, 6 Jul 2001 13:03:43 -0400 |
I am trying to merge two files so that the output contains only products
that have matching codes on both files. In addition, I don't want the
output to contain duplicate child elements under product (i.e. if both have
a name element, I only want to output the name element from the first file).
Input Files:
<first-file-list>
<product>
<code>0002</code> <name>New Name</name> <class>33</class>
</product>
...
</first-file-list>
<second-file-list>
<product>
<code>0001</code> <name>Old Name</name> <price>2.99</price>
</product>
<product>
<code>0002</code> <name>Old Name</name> <price>2.99</price>
</product>
...
</second-file-list>
Desired output:
<output-list>
<product>
<code>0002</code> <name>New Name</name> <class>33</class>
<price>2.99</price>
</product>
...
</output-list>
I've been able to get matching products using the folllowing xsl and then
copy the children from each file. I just haven't figured how to exclude
child nodes from the second file if they exist on the first file.
<xsl:template match="/">
<xsl:apply-templates
select="*//product[./code=document($second-file)//product/code]"/>
</xsl:template>
<xsl:template match="product">
<xsl:copy>
<xsl:call-template name="obtain-view-info">
<!-- This template copies the elements from the second file -->
<xsl:with-param name="product-code" select="code"/>
</xsl:call-template>
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="copy"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="copy">
<xsl:copy>
<xsl:apply-templates select="@*" mode="copy"/>
<xsl:apply-templates mode="copy"/>
</xsl:copy>
</xsl:template>
<xsl:template name="obtain-view-info">
<xsl:param name="product-code"/>
<!-- Obtain the matching product information from the view file -->
<xsl:apply-templates
select="document($second-file)//product[code=$product-code]"
mode="import"/>
</xsl:template>
<xsl:template match="product" mode="import">
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="import"/>
</xsl:template>
<xsl:template match="@*|node()" mode="import">
<xsl:copy>
<xsl:apply-templates select="@*" mode="import"/>
<xsl:apply-templates mode="import"/>
</xsl:copy>
</xsl:template>
Thanks for any help you can give me.
Jim Dendler
*****************************************************************
DISCLAIMER: The information contained in this e-mail may be confidential
and is intended solely for the use of the named addressee. Access, copying
or re-use of the e-mail or any information contained therein by any other
person is not authorized. If you are not the intended recipient please
notify us immediately by returning the e-mail to the originator.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] xsl qustion of a beginer, laurence_zhang | Thread | RE: [xsl] Merging Two Files and Rem, Michael Kay |
| RE: [xsl] Newbie Key Function issue, Kurt Geiger | Date | RE: [xsl] Encoding iso-8859-1 alway, Ruairi |
| Month |