<p>I found <a href="http://www.jenitennison.com/xslt/grouping/muenchian.html" rel="noreferrer">this page</a> describing the Muenchian method, but I think I'm applying it wrong.</p>

<p>Consider that this would return a set of ages:</p>

<pre><code>/doc/class/person/descriptive[(@name='age')]/value
</code></pre>

<blockquote>
  <p>1..2..2..2..3..3..4..7</p>
</blockquote>

<p>But I would like a nodeset only one node for each age.</p>

<blockquote>
  <p>1..2..3..4..7</p>
</blockquote>

<p>Each of these seem to return all of the values, instead of unique values:</p>

<pre><code>/doc/class/person/descriptive[(@name='age')][not(value=preceding-sibling::value)]/value
/doc/class/person/descriptive[(@name='age')]/value[not(value=preceding-sibling::value)]
</code></pre>

<p>What am I missing?</p>

Aren't you missing a reference to 'descriptive' right after the preceding-value? Some thing like the following:
```
```
/doc/class/person/descriptive[(@name='age')][not(value=preceding-sibling::descriptive[@name='age']/value)]/value
```
```
(Haven't tested it)