xml - 具有多个属性的元素的 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 语句在一个特定元素中查找属性条件,而不是在两者中查找?
解决方案
将测试放在单个谓词测试中Parameter
。
例如,改变
Parameter/@variable1 = 'foo' and Parameter/@variable2 = 'bar'
至
Parameter[@variable1 = 'foo' and @variable2 = 'bar']
以便测试涉及具有两个目标属性值的单个 Parameter
子元素,而不是可能单独限定的单独元素。MainElement
Parameter
推荐阅读
- java - Maven 指定编译时插件
- r - 从 R 数据框中的两列创建新的向量列
- html - 我如何在 css 中使用 * 来选择所有但只有一个
- python - 数据框中的索引有问题
- java - 更改使用 System.out.print() 的方法以使用 System.out.println()
- ios - 堆栈视图中仅显示最后存储的数据
- audio - 如何使用 gstreamer 将两个视频(以及它们的两个音频)混合到一个视频中?
- powershell - Powershell使用windows API拖拽鼠标
- vuejs2 - 带有 Laravel 6 Passport 的 Vue SPA
- python - 自 lxml v4.4 以来,etree.iterwalk 不再遍历处理指令