[Robert P. J. Day]
[more pedantics involving simple examples. the following results
are from "xsltproc", so it may be a processor-related thing.]
First oddity -- i had always understood that "self::node()" could
be abbreviated as just ".". but if i replace the select expression
with ".[displacement]", i get the error
Predicates are not allowed for the "." and ".." shorthand syntax. Why?
Unclear, but it is in the XPATH Rec.
should i not expect "self::node()[displacement]" to be logistically
equivalent to ".[displacement]"? or did i misread something?
You would but it is specifically disallowed.
Second puzzler
--------------
I want the "car" template to return its string value only if it's
the third in context position. (again, a weird thing to do but humor
me.) shouldn't i be able to write:
<xsl:template match="car">
<xsl:value-of select="self::node()[position() = 3]"/> # just pos 3
</xsl:template>
instead, i get nothing, even though i've verified that the
consecutive
invocations of the "car" template do, in fact, run through the context
positions 1 -> 4 for each "car" element.
You are asking for the context node - which is the only node on the self
axis -, to return all its nodes and then of those, then return the
string value of the third. The self axis will only return the context
node, so position() = 3 will never return anything (only position() = 1
will). You can check this out by writing
=<xsl:copy-of select="self::node()"/>=
and see what you get.
If you want to see data of the just the third car, you could write
<xsl:if test='position()=3'><xsl:value-of select='model'/></xsl:if>
Cheers,
Tom P
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list