xsl-list
[Top] [All Lists]

Re: Comparing nodes in XPath

2005-01-21 13:57:56
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[(_at_)id=(_dot_)/Conn]"/>

but it still doen´t 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(_at_)mulberrytech(_dot_)com
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
======================================================================


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>