[xsl] comparing two nodes

Subject: [xsl] comparing two nodes
From: "Danny Gallagher" <dgallagher999@xxxxxxxxxxx>
Date: Wed, 22 Dec 2004 10:47:06 -0500
I have everything working, but it seems there is probably an easier way to do it.

Here is my xml:

<?xml version="1.0" encoding="UTF-8"?>
<REPORT>
   <ENTRY>
       <CHECKENTRY id = '1'>
           <CHECK>
               <AMOUNT>10.00</AMOUNT>
               <ROUTING>
                   <NAME>Name</NAME>
                   <ADDRESS1>Address 1</ADDRESS1>
               </ROUTING>
           </CHECK>
       </CHECKENTRY>
       <CHECKENTRY id = '2'>
           <CHECK>
               <AMOUNT>9.00</AMOUNT>
               <ROUTING>
                   <NAME>Changed Name</NAME>
                   <ADDRESS1>Address 1</ADDRESS1>
               </ROUTING>
           </CHECK>
       </CHECKENTRY>
   </ENTRY>
</REPORT>

And the stylesheet:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html"/>
<xsl:template match="/REPORT">
<xsl:for-each select="ENTRY">
<xsl:if test="CHECKENTRY[@id='1']/CHECK/AMT != CHECKENTRY[@id='2']/CHECK/AMOUNT">
<xsl:value-of select="CHECKENTRY[@id='1']/CHECK/AMOUNT"/>
<xsl:value-of select="CHECKENTRY[@id='2']/CHECK/AMOUNT"/>
</xsl:if>
<xsl:if test="CHECKENTRY[@id='1']/CHECK/ROUTING/NAME != CHECKENTRY[@id='2']/CHECK/ROUTING/NAME">
<xsl:value-of select="CHECKENTRY[@id='1']/CHECK/ROUTING/NAME"/>
<xsl:value-of select="CHECKENTRY[@id='2']/CHECK/ROUTING/NAME"/>
</xsl:if>
<xsl:if test="CHECKENTRY[@id='1']/CHECK/ROUTING/ADDRESS1 != CHECKENTRY[@id='2']/CHECK/ROUTING/ADDRESS1">
<xsl:value-of select="CHECKENTRY[@id='1']/CHECK/ROUTING/ADDRESS1"/>
<xsl:value-of select="CHECKENTRY[@id='2']/CHECK/ROUTING/ADDRESS1"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


In the real world scenario, each <CHECK> will have many children (nested at different levels) that I need to compare values on.

Right now the stylesheet compares each tag and if they are not equal outputs the value.

Is there a way to not have to specify each element name and just run through all of them? I have control over both the stylesheet and xml.

Thanks for the help.

Danny Gallagher

Current Thread