[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
At 03:13 PM 1/21/2005, you wrote:
Antonio,
The expression "Conn" is short for "child::Conn".
The expression "./Conn" is short for "self::node()/child::Conn".
If you did extra work to do the same thing, and said
Re: [xsl] Comparing nodes in XPath
Subject: Re: [xsl] Comparing nodes in XPath From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Fri, 21 Jan 2005 15:57:56 -0500 |
At 03:13 PM 1/21/2005, you wrote:
Ok, but that's not the case when using variable. And i change that to
<xsl:value-of select="document('connections.xml')/connections/connection[@id=./Conn]"/>
but it still doen4t work the way i expected...
Antonio,
What you're missing is the concept of the "context node" for evaluating the expression.
The expression "Conn" is short for "child::Conn".
The expression "./Conn" is short for "self::node()/child::Conn".
In the example provided, the context node for the expression "@id=Conn" or "@id=./Conn" is the same -- as Mike said, the connection. (The context node for a predicate is each of the nodes being predicated.) Both of these expressions return the same thing when the context is the same.
When you use a variable, you have already bound your Conn child to the variable when the expression is evaluated, so the context node is not a concern. Note that where you bind your variable does matter.
If you did extra work to do the same thing, and said
<xsl:for-each select="document('connections.xml')/connections/connection"> <xsl:variable name="conn" select="Conn"/> <xsl:if test="@id = $conn"> <xsl:value-of select="."/> </xsl:if> </xsl:for-each>
it wouldn't work. (Nor would you, an XSLT expert, expect it to.) But this would:
<xsl:variable name="conn" select="Conn"/> <xsl:for-each select="document('connections.xml')/connections/connection"> <xsl:if test="@id = $conn"> <xsl:value-of select="."/> </xsl:if> </xsl:for-each>
Right? (And this is the better analogue to what you're doing when your predicate has "@id=$conn")
The short answer: you probably want your predicate to read "@id=current()/Conn", though without seeing the rest of the logic it's impossible to be certain. Or just use the variable: we do this all the time.
Cheers, Wendell
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Comparing nodes in XPath, António Mota | Thread | [xsl] Help Stepping through XML nod, Paul Hart |
[xsl] assigning value to xsl:variab, Prashant Bhalesain | Date | Re: [xsl] Re: validating stylesheet, Wendell Piez |
Month |