[xsl] Re: XPATH | union operator question

Subject: [xsl] Re: XPATH | union operator question
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Sun, 21 Dec 2003 12:16:11 +0100
> 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

Current Thread