XSL:
<xsl:if test=".[foo or @bar]">
something
</xsl:if>
是否测试目标是否为'foo'标记名称或具有'bar'属性?
它仅适用于IE,我想知道是否有错误。什么是等效句子,但跨浏览器工作?
答案 0 :(得分:2)
XSLT 1.0中不允许使用语法.[x]
。在XSLT 1.0的早期草案中允许它,我怀疑它是由于监督而不是故意设计决定而在最终版本中缺席(并且已经说过,它已在XSLT 2.0中恢复)。因为IE在1.0规范最终确定之前首次发布了它的XSLT处理器,所以它们可能支持这种语法,以便与这些早期草稿向后兼容。
答案 1 :(得分:0)
它测试当前节点是否具有名为foo
的子元素或具有名为bar
的属性。也就是说,如果将其更改为
<xsl:if test="foo or @bar">
您使用的语法在我的xsl解析器中被拒绝:Invalid XPath expression
Unexpected token - "[foo or @bar]"
我使用的那个应该跨浏览器工作
如果您希望选择名称为foo
或bar
属性的节点,请使用以下内容:
<xsl:if test="name()='foo' or @bar">
答案 2 :(得分: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”