如何缩短此xpath表达式?

时间:2013-04-08 18:21:16

标签: xpath set expression

我已经定义了一个名为tags的变量,它选择一个元素的节点集,这些元素的名称是以下几个值之一:

<xsl:variable name="tags" select="//xs:element[@name='Subscription' or @name='Account' or @name='Product'  or @name='ProductRatePlan' or @name='ProductRatePlanCharge' or @name='Usage']"/>

我想定义一个变量:

<xsl:variable name="tagNames" select="'Subscription','Account','Product','ProductRatePlan','ProductRatePlanCharge','Usage'/>

如何重写第一个表达式以选择名称在set $ tagNames中的所有节点?本质上,我正在寻找一个与SQL集成员资格类似的操作:

SELECT * FROM tags WHERE name in ('Subscription', 'Account', 'Product'....)

2 个答案:

答案 0 :(得分:2)

在XPath 2.0中,您可以写:

<xsl:variable name="tags" select="//xs:element[@name=('Subscription','Account','Product','ProductRatePlan','ProductRatePlanCharge','Usage')]"/>

答案 1 :(得分:1)

一种方法

//xs:element
  [contains('|Subscription|Account|Product|ProductRatePlan|ProductRatePlanCharge|Usage|',
            concat('|', @name, '|'))]

因此,您可以拥有变量或参数

<xsl:variable name="vTags"
 select="'|Subscription|Account|Product|ProductRatePlan|ProductRatePlanCharge|Usage|'"/>

,您的主要XPath表达式变为

//xs:element[contains($vTags, concat('|', @name, '|'))]