xsl: for-each select =: два условия - PullRequest
3 голосов
/ 02 марта 2011

в xsl мы можем записать два условия в цикле «для каждого». например вместо

<xsl:when test="/document/line[
                   (substring(field[@id='0'], 1,3)='MAR')
                ] and 
                /document/line[
                   contains(substring(field[@id='0'],123,4),'0010')
                ]">

мы можем написать это:

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] and 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">

С наилучшими пожеланиями

Обновление от комментариев

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR') 
                         and contains(substring(field[@id='0'],123,4),'0010')
                      ]">

1 Ответ

9 голосов
/ 02 марта 2011

Если вопрос «можно ли проверить 2 условия в атрибуте выбора для каждого», ответ будет: НЕТ . Потому что

Выражение должно соответствовать набору узлов. (от ЗВОН )

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

Но, если вы хотите выбрать два набора узлов внутри xsl:for-each или xsl:template (последний лучше) и т. Д., Вы можете использовать оператор объединения (|):

<xsl:for-each select="/document/line[
                         contains(substring(field[@id='0'], 1,3),'MAR')
                      ] | 
                      /document/line[
                         contains(substring(field[@id='0'],123,4),'0010')
                      ]">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...