Quackit Logo

XPath Comparison Operators

XPath expressions can use comparison operators. Comparison operators compare one value to another. The resulting value is a "boolean" value. A boolean value is one that only returns either true of false. Numbers return false if they are zero, otherwise they return true. Empty strings (i.e. "") return false, otherwise they return true. For example, you could use a comparison operator to check if one number is greater than another number.

Operators

Here's a list of comparison operators you can use in your XPath expressions:

OperatorDescription
=Is equal to.
!=Is not equal to.
<Is less than.
>Is greater than.
<=Is less than or equal to.
>=Is greater than or equal to.

Comparison Operator Usage Example

The Source XML File

Using the same XML file, containing 13 food items and their associated nutritional value:

<?xml version="1.0"?>
<food_list>
  <food_item type="vegetable">
    <name>Agar</name>
    <carbs_per_serving>81</carbs_per_serving>
    <fiber_per_serving>8</fiber_per_serving>
    <fat_per_serving>0.5</fat_per_serving>
    <kj_per_serving>1280</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Asparagus</name>
    <carbs_per_serving>1</carbs_per_serving>
    <fiber_per_serving>1</fiber_per_serving>
    <fat_per_serving>0</fat_per_serving>
    <kj_per_serving>40</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Cabbage</name>
    <carbs_per_serving>0</carbs_per_serving>
    <fiber_per_serving>1</fiber_per_serving>
    <fat_per_serving>0</fat_per_serving>
    <kj_per_serving>14</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Potato</name>
    <carbs_per_serving>21.5</carbs_per_serving>
    <fiber_per_serving>2</fiber_per_serving>
    <fat_per_serving>1</fat_per_serving>
    <kj_per_serving>460</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Pumpkin</name>
    <carbs_per_serving>6</carbs_per_serving>
    <fiber_per_serving>1</fiber_per_serving>
    <fat_per_serving>0.5</fat_per_serving>
    <kj_per_serving>150</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Yam</name>
    <carbs_per_serving>30.5</carbs_per_serving>
    <fiber_per_serving>2</fiber_per_serving>
    <fat_per_serving>0.5</fat_per_serving>
    <kj_per_serving>550</kj_per_serving>
  </food_item>
  <food_item type="vegetable">
    <name>Zucchini</name>
    <carbs_per_serving>1.5</carbs_per_serving>
    <fiber_per_serving>1.5</fiber_per_serving>
    <fat_per_serving>0.5</fat_per_serving>
    <kj_per_serving>55</kj_per_serving>
  </food_item>
  <food_item type="seafood">
    <name>Abalone</name>
    <carbs_per_serving>0</carbs_per_serving>
    <fiber_per_serving>0</fiber_per_serving>
    <fat_per_serving>1</fat_per_serving>
    <kj_per_serving>400</kj_per_serving>
  </food_item>
  <food_item type="seafood">
    <name>Barramundi</name>
    <carbs_per_serving>0</carbs_per_serving>
    <fiber_per_serving>0</fiber_per_serving>
    <fat_per_serving>2</fat_per_serving>
    <kj_per_serving>390</kj_per_serving>
  </food_item>
  <food_item type="fruit">
    <name>Apple</name>
    <carbs_per_serving>15</carbs_per_serving>
    <fiber_per_serving>2.5</fiber_per_serving>
    <fat_per_serving>0</fat_per_serving>
    <kj_per_serving>250</kj_per_serving>
  </food_item>
  <food_item type="fruit">
    <name>Kiwi Fruit</name>
    <carbs_per_serving>7.5</carbs_per_serving>
    <fiber_per_serving>2.5</fiber_per_serving>
    <fat_per_serving>0</fat_per_serving>
    <kj_per_serving>150</kj_per_serving>
  </food_item>
  <food_item type="grain">
    <name>Oatbran</name>
    <carbs_per_serving>62</carbs_per_serving>
    <fiber_per_serving>14</fiber_per_serving>
    <fat_per_serving>7</fat_per_serving>
    <kj_per_serving>1400</kj_per_serving>
  </food_item>
  <food_item type="grain">
    <name>Wheatgerm</name>
    <carbs_per_serving>1.5</carbs_per_serving>
    <fiber_per_serving>1</fiber_per_serving>
    <fat_per_serving>0.5</fat_per_serving>
    <kj_per_serving>70</kj_per_serving>
  </food_item>
</food_list>

The Requirement

This time, instead of displaying all 13 records (as we did in the previous lesson), we only want to display the first 5 records. Like this:

XPath comparison operators example

The Solution

We could modify the code from the previous lesson so that only the top 5 records are selected. We could achieve this using the XPath <= operator (along with the position() function), as follows:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="food_list">
  <table border="1"  style="background-color:#cccc00">
    <tr>
      <th>Node Position</th>
      <th>Food Item</th>
      <th>Carbs (g)</th>
      <th>Fiber (g)</th>
      <th>Fat (g)</th>
      <th>Energy (kj)</th>
    </tr>
    <xsl:for-each select="food_item[position() <= 5]">
      <tr>
        <td><b><xsl:value-of select="position()"/></b></td>
        <td><xsl:value-of select="name"/></td>
        <td><xsl:value-of select="carbs_per_serving"/></td>
        <td><xsl:value-of select="fiber_per_serving"/></td>
        <td><xsl:value-of select="fat_per_serving"/></td>
        <td><xsl:value-of select="kj_per_serving"/></td>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>

</xsl:stylesheet>

Enjoy this website?

  1. Link to this page (copy/paste into your own website or blog):
  2. Add this page to your favorite social bookmarks sites:
                     
  3. Add this page to your Favorites

Oh, and thank you for supporting Quackit!