0

比方说,我有一个 xslt 变量$item。最多处理,$item可能等于一个HTML标签,例如:<td><input style="width: 10em"></td>或者它可能是一个空字符串。

现在我想测试是否$item为空。如果我这样做<xsl:if test="$item = ''">了,似乎条件变成了 true if $item = <td><input style="width: 10em"></td>。如何设计条件测试来查看是否$item真的为空?

这是我想让它工作的示例代码。$item在这种情况下,可能包含<td><input></td>作为输出和 if 测试通过,而我不希望这样。$item可能根本不包含任何内容,因为模板不匹配任何内容。这里没有任何东西意味着没有<td><input></td>或任何东西。

<xsl:variable name="item">
  <xsl:apply-templates/>
</xsl:varialbe>

<xsl:if test="$item=''">
  <!-- do something here -->
</xsl:if>
4

2 回答 2

0

如果你使用

<xsl:variable name="item">
  <xsl:apply-templates/>
</xsl:variable>

XSLT 1 中的变量是一个结果树片段,而在 XSLT 2 和更高版本中是一个文档(片段)节点,其中填充了apply-templates.

您没有显示绑定变量的任何上下文,但它始终是 XSLT 2 中的文档片段节点,如果您想区分它是否包含任何节点,您可以使用 eg if ($item/node()) then ... else ...then如果$item文档片段节点有任何子节点(例如,由应用模板创建),else如果它根本不包含子节点,则表示。

于 2020-11-03T11:14:51.163 回答
0

XSLT 2.0+

您可以使用测试 $item 是否是零长度字符串

$item instance of xs:string and $item eq ""

(尽管您可能还想接受 的实例xs:untypedAtomic

XSLT 1.0

自从我使用 1.0 以来已经很长时间了,所以我可能忽略了一些东西;我唯一想到的是

string($item) = "" and not($item)

这依赖于 if$item是一个节点,那么它的有效布尔值为true,即使它的字符串值为空。您可能只是能够单独使用条件not($item),但如果例如$item是一个数字,这可能不会给出正确的答案。

PS:请标记 XSLT 问题以表明您使用的语言版本;答案往往会有所不同。

于 2020-11-03T11:22:44.560 回答