2015-02-16 2 views
0

Я довольно новичок в xslt, поэтому мне может быть что-то не так просто, но я не могу найти его. Я пытаюсь построить предложение when с несколькими условиями. Херес, что у меня есть.Запись предложения xsl when с несколькими условиями

<xsl:when test="(string-length(current()/SSN/text())) = 9 AND not(string(number(current()/SSN/text())) = 'NaN')"> 
    <IdCodeQualifier> 
     <xsl:value-of select="'34'" /> 
    </IdCodeQualifier> 
    <SSN> 
     <xsl:value-of select="current()/SSN/text()" />     
    </SSN> 
</xsl:when> 

Это приводит к:

XSLT-компиляции ошибка в (97,16). Подробнее см. InnerException. 'boolean ((string-length (current()/SSN/text())) = 9 AND not (string (number (current()/SSN/text())) =' NaN '))' является недопустимым XPath выражение. 'boolean ((string-length (current()/SSN/text())) = 9 AND not (string (number (current()/SSN/text())) =' NaN '))' имеет недопустимый токен ,

Однако это работает нормально.

<xsl:when test="string-length(current()/SSN/text()) = 9"> 
    <xsl:if test="string(number(current()/SSN/text())) != 'NaN'"> 
     <IdCodeQualifier> 
      <xsl:value-of select="'34'" /> 
     </IdCodeQualifier> 
     <SSN> 
      <xsl:value-of select="current()/SSN/text()" />     
     </SSN> 
    </xsl:if> 
</xsl:when> 

Так что же мне не хватает?

ответ

1

Использовать and вместо AND. XPath чувствителен к регистру.

+0

Я знал, что это должно быть что-то простое. Благодарю. –

+0

@GamaMartinez, Добро пожаловать. –

1

Как говорит Кирилл, AND недействителен XPath.

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

<xsl:when test="string-length(SSN) = 9 and number(SSN) = number(SSN)"> 
    <IdCodeQualifier> 
     <xsl:value-of select="'34'" /> 
    </IdCodeQualifier> 
    <SSN> 
     <xsl:value-of select="SSN" />     
    </SSN> 
</xsl:when> 

В общем, я хотел бы предложить ограничив использование text(), если у вас нет особой необходимости использовать его.

Смежные вопросы