xslt - programming techniques

2019-09-19 06:00发布

问题:

A question on Oliver Beckers efficient methods on xslt programming at this link.

We know that using this code, we can eliminate verbose xsl choose method

concat(
substring(Str1,1 div Cond),
substring(Str2,1 div not(Cond))
)

However what can we specify in 'condition', just to check for presence or absence of nodes?

we cannot specify

concat(
substring(Str1,1 div test="/node"),
substring(Str2,1 div not(test="/node"))
)

which will throw syntax errors.

回答1:

Try this expression (where node is the name of the node you want to test):

<xsl:value-of select="concat(
   substring('Yes', 1 div not(not(/root/node))), 
   substring('No', 1 div not(/root/node)))"/>

Or better still

<xsl:value-of select="concat(
   substring('Yes', 1 div boolean(/root/node)), 
   substring('No', 1 div not(/root/node)))"/>

When applied to this XML, then Yes is output

<root>
   <node>Test</node>
</root>

But when applied to this XML, the No is output

<root>
   <othernode>Test</othernode>
</root>