XSLT: Как представить ИЛИ в атрибуте match? - PullRequest
27 голосов
/ 05 марта 2009

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

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

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

Ответы [ 5 ]

38 голосов
/ 05 марта 2009

Попробуйте это:

<xsl:template match= "A | B" >

Подробнее см. На этой странице.

26 голосов
/ 06 марта 2009

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

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

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

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

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

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

12 голосов
/ 06 марта 2009

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

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

вместо

/red/*[name() = 'yellow' or name()='orange']/blue/green/gold
6 голосов
/ 06 марта 2009

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

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

  1. Шаблон соответствует узлам , а не строкам. Поэтому имена сопоставляемых элементов не должны указываться в виде строк в кавычках.

  2. Оператор XPath "или" действует на два логических значения, а не на узлы. Здесь необходим другой оператор XPath - оператор union"|" .

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

<xsl:template match= "A | B" >
     <!-- whatever I want to do here -->
</xsl:template>
1 голос
/ 05 марта 2009

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

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

Синтаксис:

<xsl:template match="A|B">
   <!-- Do your stuff> -->
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...