2013-04-08 3 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

+0

Я считаю, что это 2.0. –

ответ

2

В XPath 2.0 вы можете написать:

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

В XPath 1.0 вы можете сделать что-то вроде ''. –

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, '|'))] 
Смежные вопросы