如何检查apply-template filled变量是否是XSLT中的字符串或(可能)空节点?

时间:2010-03-08 06:53:30

标签: xslt

我需要对变量进行测试,在两种情况下评估为true:

  • 其中有一个字符串,其中包含任何非空白字符
  • 有任何节点(可能是空的)

并且变量填充了apply-template调用结果。

我试过

test="normalize-space($var)"

但这并不包括空标签的可能性。我也试过这个:

test="$var"

但即使对于只有空格的字符串,这也会评估为真。

顺便说一下,“$ var / *”会产生错误“表达式......我不记得的东西......节点集”,我认为这是因为apply-template变量实例化。

是否有任何(这意味着多级决策)解决方案?

编辑:我忘了说它适用于XSLT 1.0,最好没有任何exslt扩展或类似。

2 个答案:

答案 0 :(得分:1)

如果要检查结果树片段是否包含任何子节点,则需要exsl:node-set eg。

<xsl:if test="exsl:node-set($variable)/node()"
   xmlns:exsl="http://exslt.org/common">

如果没有该扩展功能(或您的特定XSLT 1.0处理器提供的类似功能),则无法执行该检查。

答案 1 :(得分:0)

希望这会有所帮助:

如果字符串中包含任何字符,则“string($variable)”将为true,如果等于''则为false。

http://www.dpawson.co.uk/xsl/sect2/N3328.html#d4474e64

不包含子节点:not(node())

不包含任何文字内容:not(string(.))

不包含空格以外的文字:not(normalize-space(.))

除评论外不包含任何内容:not(node()[not(self::comment())])