Subject: RE: [xsl] // and descendant interchangeable ? From: <Jarno.Elovirta@xxxxxxxxx> Date: Fri, 17 Sep 2004 08:05:09 +0300 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] // and descendant interchange, santony | Thread | RE: [xsl] // and descendant interch, Jarno.Elovirta |
[xsl] // and descendant interchange, santony | Date | RE: [xsl] // and descendant interch, Jarno.Elovirta |
Month |