Подтвердить что ты не робот

XSLT: как представить OR в атрибуте "match"?

Я хочу выполнить ряд операций над элементами, которые соответствуют имени "A" или "B". Я думаю о чем-то подобном ниже, но это не работает.

<xsl:template match= " 'A' or 'B'" >
     <!-- whatever I want to do here -->
</xsl:template>

Не удалось найти подходящую для него ссылку на язык XSLT. Пожалуйста помоги! Спасибо!!

4b9b3361

Ответ 2

Обычно A | B - это правильный способ сделать это. Но характер канала - это в основном объединение двух полных выражений XPath. Это может раздражать его использование в таком случае:

/red/yellow/blue/green/gold | red/orange/blue/green/gold

так как вы повторяете всю полноту выражения, за исключением того, что изменяется одна маленькая часть.

В подобных случаях часто имеет смысл использовать предикат и функцию name():

/red/*[name() = 'yellow' or name()='orange']/blue/green/gold

Этот метод дает вам доступ к гораздо более широкому диапазону логических операций. Он также (предположительно) быстрее, так как навигатор XPath должен проходить только те узлы, которые он тестировал.

Ответ 3

Я думаю, что более удобно использовать этот XPath

/red/(yellow | orange)/blue/green/gold

а не

/red/*[name() = 'yellow' or name()='orange']/blue/green/gold

Ответ 4

<xsl:template match= " 'A' or 'B'" >

Есть несколько проблем с этим шаблоном соответствия:

Принимая во внимание вышесказанное, вы правильно укажете правило шаблона как:

<xsl:template match= "A | B" >
     <!-- whatever I want to do here -->
</xsl:template>

Ответ 5

Ниже была получена информация из: http://www.cafeconleche.org/books/bible2/chapters/ch17.html#d1e2090

Я перефразирую, пожалуйста, найдите текст "Использование оператора или оператора" в этом документе.

Синтаксис:

<xsl:template match="A|B">
   <!-- Do your stuff> -->
</xsl:template>