xpath - XSLT 1.0 Idiom for ternary if? -



xpath - XSLT 1.0 Idiom for ternary if? -

this java programme makes utilize of ternary if, map booleans output strings: (a "*" true, empty string false).

public class ternary { public static void main(string[] args) { boolean flags[]={true,false,true}; (boolean f : flags) { system.out.println(f?"*":""); } } }

so output *, [empty], *.

i have input xml document, like:

<?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="change.xsl"?> <root> <change flag="true"/> <change flag="false"/> <change flag="true"/> </root>

and have next xslt template maps true '*' , false '' (it works):

<xsl:template match="change"> <xsl:variable name="flag" select="translate(substring(@flag,1,1),'tf','*')"/> <xsl:value-of select="$flag"/> </xsl:template>

is there more concise version of ?

a) can automatically value of boolean true|false straight string 'true|false' ? b) there (xpath?) build map boolean true|false '*', '' ?

a) can automatically value of boolean true|false straight string 'true|false' ?

b) there (xpath?) build map boolean true|false '*', '' ?

this xpath question.

i. xpath 1.0

there more 1 xpath expressions evaluation of produces wanted result:

substring('*', 2 -(@flag = 'true'))

this answers b) -- notice strings 'true' , 'false' aren't boolean values! 2 boolean values true() , false() , not strings.

in above look utilize fact in xpath 1.0 if boolean in context number needed, automatically converted number. definition:

number(true()) 1

and

number(false()) 0

thus sec argument of phone call substring() above:

2 - (@flag = 'true')

is evaluated 1 when @flag = 'true' , 2 otherwise.

a more general xpath 1.0 look produces string $s1 if $val "x" , produces string $s2 if $val "y" :

concat(substring($s1, 1 div ($val = "x")), substring($s2, 1 div ($val = "y")) )

this produces string $s1 when $val = "x", string $s2 when $val = "y", , empty string -- if none of these 2 conditions holds.

the above xpath 1.0 look can generalized produce n different string results $s1, $2, ..., $sn when $val 1 of values $v1, $v2, ..., $vn because function concat() can have number of arguments.

ii. xpath 2.0 (xslt 2.0)

'*'[current()/@flag = 'true']

and more generally, given 2*n atomic values $s1, $s2, ... $sn , $v1, $v2, ..., $vn, such $vi values different, result of evaluating xpath 2.0 expression:

($s1, $s2, ..., $sn)[index-of(($v1, $v2, ..., $vn), $v)]

is $sk when $v eq $vk.

xslt xpath boolean ternary

Comments

Popular posts from this blog

How do I check if an insert was successful with MySQLdb in Python? -

delphi - blogger via idHTTP : error 400 bad request -

postgresql - ERROR: operator is not unique: unknown + unknown -