首页 > 解决方案 > 具有多个属性的元素的 XSLT if 语句

问题描述

我有以下 XML 代码:

<MainElement name = "apple">
   <Parameter variable1 = "foo" variable2 = "bar"/>
   <Parameter variable1 = "foo" variable2 = "notBar"/>

我正在使用 xsl 打印出它的名称,MainElement如果它包含一个带有variable1 == "foo"和的参数variable2 == "bar",如下所示:

<xsl:for-each select = "MainElement">
   <xsl:if test = "Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'bar'">
      ...
   </xsl:if>
   <xsl:if test = "Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'notBar'">
</xsl:for-each>

问题是这个 xsl 代码不会检查一个Parameter元素是否包含两个适当的属性,它会查看两个 Parameter 元素以查看其中一个是否包含适当的属性。

我知道我可以尝试没有if's 的另一种方法,但现在出于我自己的好奇心,我想知道如何让 if 语句在一个特定元素中查找属性条件,而不是在两者中查找?

标签: xmlxsltxslt-1.0

解决方案


将测试放在单个谓词测试中Parameter

例如,改变

Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'bar'

Parameter[@variable1 = 'foo' and @variable2 = 'bar']

以便测试涉及具有两个目标属性值的单个 Parameter子元素,而不是可能单独限定的单独元素。MainElementParameter


推荐阅读