2012-07-04 1 views
3

Я хочу присвоить значение переменной, если конкретный атрибут возвращает определенное значение. Здесь я хочу присвоить значение «young» vaiable «person», если pr: all/[@ pr: name = current()/@ cx: name]/pr: properties/(@ ls: middlename) является «cengie ». Это возможно?Назначение строки переменной в зависимости от условия в xslt

<xsl:variable 
    name='person' select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'> 
</xsl:variable> 
+0

XSLT не «назначить »и« return », он соответствует и преобразуется. Может быть, формулировка нюанса, возможно, недоразумение парадигмы. –

+4

XSLT говорит о« привязке »переменной к значению. Разница между« bind »и« assign »заключается в том, что переменная связана к значению, как только оно объявлено и остается привязанным к тому же значению, что и пока он находится в сфере охвата. Конечно, значение, которое вы связываете с ним, может быть определено условным выражением, оцененным во время выполнения. –

+0

Спасибо за объяснение Майкл! – harsh

ответ

18

Вы можете поместить любой код XSLT в пределах XSL: переменная и результат будет назначен переменная. В этом случае вы могли бы использовать в XSL: если, чтобы проверить состояние

<xsl:variable name="person"> 
    <xsl:if test="pr:all[@pr:name=current()/@cx:name]/pr:properties[@ls:middlename='cengie']"> 
     <xsl:text>young</xsl:text> 
    </xsl:if> 
</xsl:variable> 

Если вы хотите в «другое» дело здесь, вы бы использовать XSL: выбрать вместо этого.

+0

спасибо за ответ. можете ли вы рассказать мне, что такое значение переменной, если «xsl: if test» является ложным. – harsh

+0

Если ответ неверный, переменная будет пустой. Эффективно это будет пустая строка. –

+0

спасибо помощнику! :) – harsh

3

Проверьте это: https://github.com/wildfly/wildfly/blob/master/testsuite/integration/src/test/xslt/enableTrace.xsl

<xsl:template match="//l:subsystem/l:periodic-rotating-file-handler" use-when="$trace"> 
    <xsl:choose> 
     <xsl:when test="$trace='none'"> 
      ... 
     </xsl:when> 
     <xsl:otherwise> 
      ... 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

Применить, что ваш код ...

+0

спасибо, но это не то, что я ищу. – harsh

+0

Ну, положите его в переменную, и это все - нет? –

+0

@TimC и Ondra ответили на ваш вопрос, поскольку он написан и обычно интерпретируется. Если это не тот ответ, который вам нужен, вам нужно будет объяснить, что вам нужно. –

2
<xsl:variable name='person' 
    select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'> 

</xsl:variable> 

Это синтаксически незаконно XPath - как 1.0 и 2.0. Шаг местоположения не может начинаться с предиката. Подпадающая подлость: /[.

Другая ошибка синтаксиса (на этот раз XML-well-shapeness) заключается в том, что элемент <xsl:variable>, указанный выше, не закрыт.

Необходимо исправить это.

Помимо этого, здесь это решение в XSLT 2.0 (с синтаксисом выражения XPath цитированной выше и из <xsl:variable> исправлено:

В XSLT 2.0:

<xsl:variable name="person" as="xs:string?" select= 
    "'young'[current()/pr:all[@pr:name=current()/@cx:name] 
              /pr:properties 
               [@ls:middlename='cengie'] 
      ]"/> 
+0

благодарит за предложение. Я изменил выражение в соответствии с вашим предложением. Спасибо что подметил это. – harsh

+0

@harsh: Добро пожаловать. –