我想对名称为“A”或“B”的元素执行一系列操作。我正在考虑下面这样的事情,但它不起作用。
<xsl:template match= " 'A' or 'B'" >
<!-- whatever I want to do here -->
</xsl:template>
无法为其找到适当的XSLT语言参考。请帮忙!谢谢!
答案 0 :(得分:38)
答案 1 :(得分:26)
通常A | B
是执行此操作的正确方法。但是管道字符基本上是两个完整的XPath表达式的联合。在这样的情况下使用它可能很烦人:
/red/yellow/blue/green/gold | red/orange/blue/green/gold
因为你正在重复整个表达式,除了它的一小段变化。
在这种情况下,使用谓词和name()
函数通常是有意义的:
/red/*[name() = 'yellow' or name()='orange']/blue/green/gold
此技术使您可以访问更广泛的逻辑操作。它(也可以)更快,因为XPath导航器只需要遍历它正在测试一次的节点。
答案 2 :(得分:12)
我认为使用这个XPath更方便
/red/(yellow | orange)/blue/green/gold
而不是
/red/*[name() = 'yellow' or name()='orange']/blue/green/gold
答案 3 :(得分:6)
<xsl:template match= " 'A' or 'B'" >
此匹配模式存在一些问题:
模板匹配节点,而非字符串。因此,不应将要匹配的元素的名称指定为带引号的字符串。
XPath operator "or" 对两个布尔值起作用,而不是在节点上。这里需要的是another XPath operator -- the union operator "|"。
考虑到上述情况,可以正确地将模板规则指定为:
<xsl:template match= "A | B" >
<!-- whatever I want to do here -->
</xsl:template>
答案 4 :(得分:1)
以下信息来自:http://www.cafeconleche.org/books/bible2/chapters/ch17.html#d1e2090
我会解释,请搜索“使用或运算符|”文本在那份文件中。
语法为:
<xsl:template match="A|B">
<!-- Do your stuff> -->
</xsl:template>