Xpath:有没有一种不那么冗长的方法来过滤多个“包含”条件?

Xpath Is there a less verbose way to filter with multiple 'contain' conditions?

提问人:DaveF 提问时间:9/28/2023 最后编辑:kjhughesDaveF 更新时间:9/28/2023 访问量:34

问:

and (contains(BusinessType,'Restaurant') or contains(BusinessType,'Pub') or contains(BusinessType,'Takeaway') <snip...>)

上面的工作方式是预期的返回包含指定单词的案例,但是是否有不那么冗长/更有效的代码?

像这样的东西,但实际上有效吗?

and (contains(BusinessType,'Restaurant|Pub|Takeaway'))
xml xpath xslt xslt-2.0 xpath-2.0

评论

0赞 michael.hor257k 9/28/2023
可能反转函数的参数可能对您有用(如下所述,这里的目标尚不清楚)。无论如何,在 XSLT 2.0 中,您有更好的选择(如下所示)。contains()

答:

3赞 Mads Hansen 9/28/2023 #1

matches() 接受正则表达式,并会做你想做的事:

matches(BusinessType,'Restaurant|Pub|Takeaway')
1赞 kjhughes 9/28/2023 #2

如果您真的想要针对一组可能的子字符串进行子字符串包含测试(即 不仅应该匹配,而且应该匹配 和 ),然后查看 Mads 的答案 (+1)。BusinessType'Restaurant''Fine Dining Restaurant''Non-Restaurants'

如果您确实希望针对一组可能的值进行字符串相等性测试,请按如下方式更新正则表达式:

matches(BusinessType, '^(Restaurant|Pub|Takeaway)$')

或者改用此更简洁的表单:

BusinessType = ('Restaurant', 'Pub', 'Takeaway')