I have a similar problem with this evaluation in document order:
<things>
<thing/>
<thing xml:lang="de"/>
<thing xml:lang="en"/>
</things>
<value-of select="(thing[lang($mylang)] | thing)[1]"/>
What I tried with this was to get a specific thing with the requested
language $mylang, and if no such element exists, to use the generic
thing without the xml:lang attribute. Obviously this does not work, I
always get the <thing/> first.
Is there an elegant solution to this?
The following Xpath expression selects a node-set $ns1 if a condition $p is
true and selects a node-set $ns2 if the same condition $p is not true:
$ns1[$p] | $ns2[not($p)]
When it is known that the condition $p is that $ns1 must be non-empty, the
above XPath expression can be simplified to the following:
$ns1 | $ns2[not($ns1)]
In this specific case we'll have:
/*/thing[lang($mylang)] |
/*/thing[1][not(/*/thing[lang($mylang)] )]
Dimitre Novatchev.
FXSL developer
http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list