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



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

最新更新