Wendell Piez  
>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 doen´t work the way I expected... 
 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, 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.  |