如何在XSLT模板匹配的XPATH中添加OR条件

时间:2018-04-21 13:45:47

标签: templates xslt match

我需要选择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>

1 个答案:

答案 0 :(得分:1)

XPath 中的

Or运算符写为|(垂直条)。

要引用包含某些文本值的元素,您应该使用它 一个谓词,类似于[text() = '...']

因此,您的模板可以写成:

<xsl:template match="A1/B1[text() = 'CAT'] | A2/B1[text() = 'DOG']"/>

请注意,如果是空模板,则不必编写 任何单独的结束标记。写<xsl:template .../>就足够了 正如我上面所做的那样。

补充说明

您可以写text()一个点来代替.

XPath 表达式A1[B1 = 'CAT']也是正确的,但其含义是 不同于以上。它指的是:

  • 整个 A1元素,
  • 具有内容 CAT
  • 的子B1元素。