1

XSL:

<xsl:if test=".[foo or @bar]">
    something
</xsl:if>
  1. 是否测试目标是否具有“foo”标签名称或具有“bar”属性?

  2. 它只适用于IE,我想知道是否有错误。什么是等效的句子但可以跨浏览器工作?

4

3 回答 3

2

.[x]XSLT 1.0 中不允许使用该语法。它在 XSLT 1.0 的早期草案中被允许,我怀疑最终版本中没有它是由于疏忽而不是经过深思熟虑的设计决定(正如已经指出的,它在 XSLT 2.0 中恢复了)。因为 IE 在 1.0 规范最终确定之前首先发布了它的 XSLT 处理器,所以它们可能支持这种语法以向后兼容那些早期的草案。

于 2012-04-06T18:12:11.023 回答
0

它测试当前节点是否具有名为的子元素foo或具有名为的属性bar。也就是说,如果您将其更改为

<xsl:if test="foo or @bar">

您使用的语法在我的 xsl 解析器中被拒绝:Invalid XPath expression Unexpected token - "[foo or @bar]"

我使用的应该可以跨浏览器工作。
如果您希望选择具有名称foobar属性的节点,请使用以下命令:

<xsl:if test="name()='foo' or @bar">
于 2012-04-06T10:08:31.023 回答
0
<xsl:if test=".[foo or @bar]">     
  something 
</xsl:if>

在 XSLT 1.0 中,这在语法上无效并产生错误

在 XSLT 2.0 中,这相当于

 <xsl:if test="foo or @bar">     
   something 
 </xsl:if>

表达式

foo or @bar

true()当上下文节点(当前节点)有一个名为的子元素foo 上下文节点有一个名为的属性bar(或两者)时,精确计算。

否则,此表达式的计算结果为false()

因此,上面的代码片段的意思是:如果这些条件之一为真:当前节点有一个名为的子元素foo或者当前节点有一个名为的属性bar——那么输出字符串“something”

于 2012-04-06T12:22:08.633 回答