[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: XPath expression that returns the first 10 leaf e
On 22.07.2022 14:15, Martin Honnen martin.honnen@xxxxxx wrote:
On 22.07.2022 13:51, Roger L Costello costello@xxxxxxxxx wrote:
My XML document has an <airport> element:
<airport>
B B B B <a>blah</a>
B B B <b>
B B B B B B <c>blah</c>
B B B </b>
B B 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]
I think XPath 3 also allows you
B B airport/innermost(.//*)[position() le 10]
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|