2013-02-22 3 views
0

Это мой код XSLT:значения, даже если значение не существует в xslt1.0

<xsl:choose> 
    <xsl:when test="string-length(
        //Record/CIMtrek_CI_OPEX_200910_FrDiv 
        /text()) 
        != 0"> 
    <select size="1" 
      style="width:100%;" 
      name="CIMtrek_CI_OPEX_200910_FrDiv" 
      id="CIMtrek_CI_OPEX_200910_FrDiv"> 
     <option> 
     <xsl:attribute name="selected">true</xsl:attribute> 
     <xsl:value-of select="//Record 
           /CIMtrek_CI_OPEX_200910_FrDiv 
           /text()" /> 
     </option> 
    <option value="S M-SPED">S M-SPED</option> 
    <option value="S M-PPPVLD">S M-PPPVLD</option> 
    </select> 
    </xsl:when> 
    <xsl:otherwise> 
    <select size="1" 
      style="width:100%;" 
      name="CIMtrek_CI_OPEX_200910_FrDiv" 
      id="CIMtrek_CI_OPEX_200910_FrDiv"> 
     <option value="0">Select Keywords</option> 
     <option value="S M-SPED">S M-SPED</option> 
     <option value="S M-PPPVLD">S M-PPPVLD</option> 
    </select> 
    </xsl:otherwise> 
</xsl:choose> 

но когда нет никакого значения, также когда условие всегда.

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

<xsl:when 
    test="string-length(
      //Record/CIMtrek_CI_OPEX_200910_FrDiv/text() 
     ) != 0"> 

Как это исправить?

ответ

1

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

<CIMtrek_CI_OPEX_200910_FrDiv> 
    <!--* no value here! *--> 
</CIMtrek_CI_OPEX_200910_FrDiv> 

Если вы не хотите пробелы в элементе для подсчета в качестве значения, вам необходимо изменить свой тест с string-length(...) != 0 на string-length(normalize-space(...)) != 0 или его эквивалент. Из-за того, как XSLT координирует вещи с Boolean, это может быть написано более кратко как normalize-space(...) - некоторые опытные программисты XSLT предпочитают эту форму, в то время как другие находят, что неявные типы принуждения отвлекают и предпочитают более длинную более явную форму.

Если ваша проблема, как я предположил, то любое из следующих действий должно помочь:

<xsl:when 
    test="string-length(
      normalize-space(
      //Record/CIMtrek_CI_OPEX_200910_FrDiv/text() 
     ) 
     ) != 0"> 

<xsl:when 
    test="normalize-space(
      //Record/CIMtrek_CI_OPEX_200910_FrDiv/text() 
     ) != ''"> 

<xsl:when 
    test="normalize-space(
      //Record/CIMtrek_CI_OPEX_200910_FrDiv/text() 
     )"> 

Если это не проблема, то вам нужно будет более четко о том, что ваш вопрос.

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