xsl-list
[Top] [All Lists]

RE: test if node-set variable is empty

2004-12-14 08:38:49
How can I test if the variable $xsd_node was assigned a value?
In some cases the node-set expression to fill this variable might copy
nothing.

...   
<xsl:variable name="xsd_node">
  <xsl:copy-of select="$xsd_doc//xs:element[(_at_)name = $name and
count(child::node()) = 0]"/>
</xsl:variable>

An xsl:variable that contains an xsl:copy-of as its only content looks very
strange. Why do you want to work with a copy of the data, rather than
working with the original? Your code would almost certainly work just as
well, and rather faster, if you selected the data without copying it:

<xsl:variable name="xsd_node" 
  select="$xsd_doc//xs:element[(_at_)name = $name and count(child::node()) =
0]"/>

(There might be legitimate reasons to create a copy, for example if you want
to use xsl:number to number the nodes as they appear in the new tree. But
I'd be surprised.)

The value of the variable is then a node-set, and you can test whether it is
an empty node-set using count($xsd_node)=0.

Your original variable is (in XSLT 1.0) a result-tree-fragment, and in XSLT
1.0 you can only examine its contents by using the xx:node-set() extension.
You would then want to test whether the root node of the RTF has any element
children:

xsl:if test="xx:node-set($xsd_node)/*"

Michael Kay
http://www.saxonica.com/


<xsl:if test="???">
...

Is there something like empty($xsd_node)?

Cheers,

R.

--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>