我需要选择 XSLT 的 2 个节点字段的两个值。
我需要通过同时选择 CAT 和 DOG 来选择节点 A1 和 A2。
输入如下所示。
<MAIN>
<A1>
<B1>CAT</B1>
<B2>KITTEN</B2>
</A1>
<A2>
<B1>DOG</B1>
<B2>PUPPY</B2>
</A2>
<A3>
<B1>LION</B1>
<B2>CUB</B2>
</A3>
</MAIN>
我正在使用下面的表达式:
<xsl:template match="MAIN[(A1/B1='CAT') or (A2/B1='DOG')]">
</xsl:template>
这会在运行时给出 XPATH 表达式错误。
也在下面使用,值未拾取。
<xsl:template match="MAIN[A1/B1='CAT' or A2/B1='DOG']">
</xsl:template>
XPath 中的Or
运算符写为 |
(竖线(。
要引用包含某些文本值的元素,您应该使用一个谓词,类似于[text() = '...']
.
因此,您的模板可以编写为:
<xsl:template match="A1/B1[text() = 'CAT'] | A2/B1[text() = 'DOG']"/>
请注意,在空模板的情况下,您不必编写任何单独的结束标记。写<xsl:template .../>
就足够了正如我上面所做的那样。
补充说明
您可以写.
一个点,而不是text()
。
XPath 表达式A1[B1 = 'CAT']
也是正确的,但其含义是与上述不同。它指的是:
- 全
A1
元素, - 它具有具有内容 CAT 的子
B1
元素。