2013-04-08 63 views
1

我已經定義的變量稱爲標記,其選擇的節點集的名字有幾個值中的一個元素:如何縮短此xpath表達式?

<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'/> 

怎麼可能我重寫第一個表達式來選擇所有名稱在集合$ tagNames中的節點?從本質上說,我要找的是很是類似一個SQL集合成員的操作:

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

你使用哪種版本的XSLT的? – nwellnhof 2013-04-08 20:05:10

+0

我相信它是2.0。 – 2013-04-09 20:14:38

回答

2

在XPath 2.0你可以寫:

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

在XPath 1.0中,您可以執行類似''。 – 2013-04-08 22:59:57

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, '|'))]