On 22.07.2022 13:51, Roger L Costello costello@xxxxxxxxx wrote:
My XML document has an <airport> element:
<airport>
<a>blah</a>
<b>
<c>blah</c>
</b>
...
</airport>
I want the first 10 leaf elements within the <airport> element (<a>, <c>,
...).
I thought this XPath would do the job:
<xsl:for-each select="airport//*[not(child::*)][position() le 10]">
But that XPath does not return the first 10 leaf elements. It returns over
nine thousand elements!
What is that XPath expression saying? Clearly it is saying something
different than I thought it was saying.
I think I found the correct XPath expression:
<xsl:for-each select="(airport//*[not(child::*)])[position() le 10]">
Do you agree that that XPath expression will select the first 10 leaf
elements within the <aircraft> element?
An easy to make mistake with positional predicates and // in your
initial attempt but you corrected it well.
I sometimes tend to avoid the trap doing
B airport/descendant::*[not(*)][position() le 10]
|