Hi,
> I was under the impression that descendant:: and // are
> exactly the same.
No. "// is short for /descendant-or-self::node()/"
<http://localhost/TR/xpath/#path-abbrev>.
>I wrote this very simple stylesheet to
> extract the last occurance of the ORD element. But it doesnt
> work if I use //, instead if descendant:: is used, it works just fine.
> // ends up printing 'dummy' >Ist occurance of ORD
>
> Can somebody explain, the reason
> Thanks
> --sony
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns="http://www.bellsouth.com/clipwfac"
> xmlns:idm="http://www.bellsouth.com/idm"
> exclude-result-prefixes="idm">
>
> <xsl:output method="xml" version="1.0" encoding="UTF-8"
> indent="yes"/>
> <xsl:template match="/">
> <xsl:value-of select=".//idm:ORD[last()]"/>
The unabbreviated expression is
self::node()/descendant-or-self::node()/child::idm:ORD[position() = last()]
Thus, "self::node()/descendant-or-self::node()/child::idm:ORD" will select
both ORD element nodes. The predicate "position() = last()" will be true for
both elements, because the predicate is applied to the "child::idm:ORD" step.
Thus, you end up with both ORD elements. xsl:value-of will then use the first
one in document order and you end up with the dummy.
> <xsl:value-of
> select="descendant::idm:ORD[last()]"/>
Here, on the other hand, the predicte is applied to "descendant::idm:ORD" step
and you get the last ORD element in the document.
Cheers,
Jarno - Madam Zu: March 2004
|