What does test="element[@attribute]" do in XSLT?
What does开发者_运维知识库 this do exactly?
<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?
Edit
I have edited the statement above, so it tests 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?
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>
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
<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.
精彩评论