tags:

views:

182

answers:

3

what this exactly do :

<xsl:if test="./employee/first-name[@id='14']" >

I mean, when will this case be true, if ./employee/first-name[@id] != null or "", or what exactly?

EDIT: I have edited the statement above, so it test if element first-name with id=14 have a body or its body contains a data or return true if first-name event don't have a body ? Please Help

+5  A: 

If the query in <xsl:if test=...> returns at least one node then the conditional evaulates to true.

The new XSLT expression you gave:

<xsl:if test="./employee/first-name[@id='14']" >

will evaluate to true if and only if there exists a first-name node under employee whose id attribute is equal to the string '14'

<employee><first-name id="" /></employee>     <!-- does NOT match -->
<employee><first-name id="014" /></employee>  <!-- does NOT match -->
<employee>
  <first-name id="foobar" />
  <first-name id="14" />                      <!-- DOES match -->
</employee>
intgr
Could you please re-answer the modified question above ?
Mohammed
I updated my answer.
intgr
BIG thanks to you :)
Mohammed
+2  A: 

Seems there's some missing pieces, as last or "" will throw an error. But, let's see:

    ./                    search within current node
    employee/first-name   for an employee tag with an first-name child tag
    [@id]                 where first-name tag have an id attribute
    !=null                and that first-name tag have some value
Rubens Farias
+2  A: 

<xsl:if> tests an expression (like the if in traditional languages). The result of the expression is evaluated as a Boolean.

In your case, the expression is an XPath selector (/employee/first-name[@id]) - it will always return a node-set. Node-sets are evaluated as false only when they are empty (e.g. no matching nodes found).

The expression could also be something like number(/employee/id). Now the expression result is a number, which is evaluated as false if it is zero or NaN, true in all other cases.

Other values that are false are the empty string '' (true in all other cases) and the result of false() itself. Note that there also is a true() function to return a Boolean true.

Also note that the string 'false' evaluates to true, per the the described rule for strings.

Tomalak