[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

XSLT Comparison of Two Trees

Subject: XSLT Comparison of Two Trees
From: "Doug Franklin" <doug@xxxxxxxxxxxxxxxx>
Date: Tue, 08 Sep 2009 10:44:00 -0700
 XSLT Comparison of Two Trees
I wish to compare two (xml tree) documents, a previous document and it's
current version.  The previous tree looks like this: (the current tree
appears below this previous tree, the xsl - below that.)

If I could

    A. Create a report of zip codes that were added
    B. Create a report of zip codes that were deleted
    C. Create a report of zip codes that were moved
    D. Find the percentage difference of the <Total>####</Total>
information, using this algorithm: (currentTotal -
previousTotal)/previousTotal

That would be SPLENDID.

Thanks,

Doug

<?xml version="1.0" encoding="UTF-8"?>
<!-- <?xml-stylesheet href="Comparison.xsl" type="text/xsl" ?> -->
<?xml-stylesheet href="Comparison.xsl" type="text/xsl" ?>
<!-- <?xml-stylesheet href="Comparison2.xsl" type="text/xsl" ?> -->
<pFieldOfficeList>
 <city name="All areas">
  <zip zipCode="zipTotals">
   <Total>49864838</Total>
  </zip>
 </city>
 <city name="Total, California">
  <zip zipCode="zipTotals">
   <Total>4571486</Total>
  </zip>
 </city>
 <city name="Alhambra">
  <zip zipCode="zipTotals">
   <Total>17145</Total>
  </zip>
  <zip zipCode="91775">
   <Total>3160</Total>
  </zip>
  <zip zipCode="91776">
   <Total>3540</Total>
  </zip>
  <zip zipCode="91778">
   <Total>140</Total>
  </zip>
  <zip zipCode="91801">
   <Total>5790</Total>
  </zip>
 </city>
 <city name="American River">
  <zip zipCode="zipTotals">
   <Total>79685</Total>
  </zip>
  <zip zipCode="95610">
   <Total>5750</Total>
  </zip>
  <zip zipCode="95611">
   <Total>335</Total>
  </zip>
  <zip zipCode="95621">
   <Total>7135</Total>
  </zip>
  <zip zipCode="95628">
   <Total>7325</Total>
  </zip>
 </city>
 <city name="Anaheim">
  <zip zipCode="zipTotals">
   <Total>53765</Total>
  </zip>
  <zip zipCode="90620">
   <Total>5960</Total>
  </zip>
  <zip zipCode="90621">
   <Total>2810</Total>
  </zip>
  <zip zipCode="90622">
   <Total>105</Total>
  </zip>
  <zip zipCode="90623">
   <Total>2320</Total>
  </zip>
 </city>
 <city name="Antioch">
  <zip zipCode="zipTotals">
   <Total>33190</Total>
  </zip>
  <zip zipCode="94505">
   <Total>1575</Total>
  </zip>
  <zip zipCode="94509">
   <Total>8235</Total>
  </zip>
  <zip zipCode="94511">
   <Total>740</Total>
  </zip>
  <zip zipCode="94513">
   <Total>6855</Total>
  </zip>
 </city>
 <city name="Auburn">
  <zip zipCode="zipTotals">
   <Total>41830</Total>
  </zip>
  <zip zipCode="95602">
   <Total>4100</Total>
  </zip>
  <zip zipCode="95603">
   <Total>5535</Total>
  </zip>
  <zip zipCode="95604">
   <Total>775</Total>
  </zip>
  <zip zipCode="95631">
   <Total>1295</Total>
  </zip>
 </city>
 <city name="Bakersfield">
  <zip zipCode="zipTotals">
   <Total>52885</Total>
  </zip>
  <zip zipCode="93205">
   <Total>805</Total>
  </zip>
  <zip zipCode="93206">
   <Total>200</Total>
  </zip>
  <zip zipCode="93222">
   <Total>460</Total>
  </zip>
  <zip zipCode="93224">
   <Total>95</Total>
  </zip>
 </city>
 <city name="Bakersfield, East Hills">
  <zip zipCode="zipTotals">
   <Total>28325</Total>
  </zip>
  <zip zipCode="93203">
   <Total>1500</Total>
  </zip>
  <zip zipCode="93220">
   <Total>70</Total>
  </zip>
  <zip zipCode="93241">
   <Total>1510</Total>
  </zip>
  <zip zipCode="93305">
   <Total>3475</Total>
  </zip>
 </city>
</pFieldOfficeList>

Tree of current information:
<?xml version="1.0" encoding="UTF-8"?>
<!-- <?xml-stylesheet href="Comparison.xsl" type="text/xsl" ?> -->
<?xml-stylesheet href="Comparison.xsl" type="text/xsl" ?>
<!-- <?xml-stylesheet href="Comparison2.xsl" type="text/xsl" ?> -->
<cFieldOfficeList>
 <city name="All areas">
  <zip zipCode="zipTotals">
   <Total>49864838</Total>
  </zip>
 </city>
 <city name="Total, California">
  <zip zipCode="zipTotals">
   <Total>4571486</Total>
  </zip>
 </city>
 <city name="Alhambra">
  <zip zipCode="zipTotals">
   <Total>17145</Total>
  </zip>
  <zip zipCode="91775">
   <Total>3160</Total>
  </zip>
  <zip zipCode="91776">
   <Total>3540</Total>
  </zip>
  <zip zipCode="91778">
   <Total>140</Total>
  </zip>
  <zip zipCode="91801">
   <Total>5790</Total>
  </zip>
  <zip zipCode="11111"><!-- This zip code was added to Alhambra -->
   <Total>1000</Total>
  </zip>
 </city>
 <city name="American River">
  <zip zipCode="zipTotals">
   <Total>79685</Total>
  </zip>
  <zip zipCode="95611">
   <Total>335</Total>
  </zip>
  <!-- <zip zipCode="95621">
   <Total>7135</Total>
  </zip> --><!-- This zip code was deleted from American River -->
 </city>
 <city name="Anaheim">
  <zip zipCode="95610"><!-- zip code was moved from American River to
Anaheim -->
   <Total>5750</Total>
  </zip>
  <zip zipCode="zipTotals">
   <Total>53765</Total>
  </zip>
  <zip zipCode="90620">
   <Total>5960</Total>
  </zip>
  <zip zipCode="90621">
   <Total>2810</Total>
  </zip>
  <zip zipCode="90622">
   <Total>105</Total>
  </zip>
  <zip zipCode="90623">
   <Total>2320</Total>
  </zip>
 </city>
 <city name="Antioch">
  <zip zipCode="zipTotals">
   <Total>33190</Total>
  </zip>
  <zip zipCode="22222"><!-- This zip code was added to Antioch -->
   <Total>5790</Total>
  </zip>
  <!-- <zip zipCode="94505">
   <Total>1575</Total>
  </zip> --><!-- This zip code was deleted from Antioch -->
  <zip zipCode="94509">
   <Total>8235</Total>
  </zip>
  <zip zipCode="94511">
   <Total>740</Total>
  </zip>
  <zip zipCode="94513">
   <Total>6855</Total>
  </zip>
 </city>
 <city name="Auburn">
  <zip zipCode="zipTotals">
   <Total>41830</Total>
  </zip>
  <zip zipCode="33333"><!-- This zip code was added to Auburn -->
   <Total>5790</Total>
  </zip>
  <zip zipCode="95628"><!-- This zip code was moved from American River
to Auburn -->
   <Total>7325</Total>
  </zip>
  <zip zipCode="95602">
   <Total>4100</Total>
  </zip>
  <zip zipCode="95603">
   <Total>5535</Total>
  </zip>
  <zip zipCode="95604">
   <Total>775</Total>
  </zip>
  <zip zipCode="95631">
   <Total>1295</Total>
  </zip>
 </city>
 <city name="Bakersfield"><!-- Nothing happened to this zip code -->
  <zip zipCode="zipTotals">
   <Total>52885</Total>
  </zip>
  <zip zipCode="93205">
   <Total>805</Total>
  </zip>
  <zip zipCode="93206">
   <Total>200</Total>
  </zip>
  <zip zipCode="93222">
   <Total>460</Total>
  </zip>
  <zip zipCode="93224">
   <Total>95</Total>
  </zip>
 </city>
 <city name="Bakersfield, East Hills"><!-- Nothing happened to this zip
code -->
  <zip zipCode="zipTotals">
   <Total>28325</Total>
  </zip>
  <zip zipCode="93203">
   <Total>1500</Total>
  </zip>
  <zip zipCode="93220">
   <Total>70</Total>
  </zip>
  <zip zipCode="93241">
   <Total>1510</Total>
  </zip>
  <zip zipCode="93305">
   <Total>3475</Total>
  </zip>
 </city>
</cFieldOfficeList>

XSL:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <html>
   <body>
    <head>
     <title>City Evaluation</title>
    </head>
    <h3><font color="darkred">Cities</font></h3>
    <xsl:apply-templates/>
   </body>
  </html>
 </xsl:template>
 <xsl:template match="/">
 <!-- <xsl:template match="@*|node()"> -->
 <!-- <xsl:template match="*"> -->
  <!-- <xsl:for-each
select="document('cMulberry.xml')/cMulberry/city/@name"> -->
   <!-- <xsl:if
test="select=document('cMulberry.xml')/cMulberry/city/@name='Alhambra'">
-->
   <!-- <xsl:if test="position()=3">
    <xsl:value-of select="."/><br/>
   </xsl:if>
  </xsl:for-each> -->
  <xsl:for-each select="pFieldOfficeList">
   <html>

   <table border="1">
    <xsl:for-each select="city">
     <tr>
      <td width="100" align="center" bgcolor="goldenrod">
       <xsl:value-of select="@name"/></td>

       <td align="center">I would like column headers here</td>
      <td align="center">I would like the cities from the cMulberry XML
document here
       <xsl:for-each select="zip">
        <tr>
         <td align="right"><font size="2"><xsl:value-of
select="@zipCode"/></font></td>
         <td><xsl:call-template name="infoCell" /></td>
        </tr>
       </xsl:for-each>
      </td>
     </tr>

    </xsl:for-each>
   </table>

   </html>
  </xsl:for-each>
 </xsl:template>
 <!-- <xsl:apply-templates
select="document('cMulberry.xml')/cMulberry/city/@name"/> This displays
all new cities -->
 <xsl:template name="infoCell">
  <table border="1" width="100%"><tr><td width="10%" align="right"><font
size="2"><xsl:value-of select="Total"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Retired_Workers"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Disabled_Workers"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Widow_er_s"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Spouses"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Children"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Total_All"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Total_Retired_Workers"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Total_Widow_er_s"/></font></td>
             <td width="10%" align="right"><font size="2"><xsl:value-of
select="Sixty-Five_plus"/></font></td>
           </tr></table>
 </xsl:template>
 <xsl:template name="equalCities">
  <h1>Hello</h1>
 </xsl:template>
</xsl:stylesheet>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.