xsl-list
[Top] [All Lists]

Re: XPATH | union operator question

2003-12-21 04:16:11
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



<Prev in Thread] Current Thread [Next in Thread>