Длина строки XSLT 1.0 — 2

#xslt #xslt-1.0 #string-length

#xslt #xslt-1.0 #длина строки

Вопрос:

Мне нужно проверить длину поля, а затем добавить . две предпоследние цифры.

Пример: значение Amount равно 0001234567 , которое должно быть заменено на 00012345.67 . Здесь длина строки будет равна 10.

Но команда завершается с ошибкой и не может извлечь значение из
($VARAmtLength-2) или ($VARAmtLength-1) .

Мой код, как показано ниже:

 <xsl:variable name="VARAmtLength" select="string-length (ns0:Amount )"/>
<xsl:if test=" ($VARAmtLength> 0)">
    <tns:Amount>            
        <xsl:value-of select="concat(substring(ns0:Amount, 1, ($VARAmtLength- 2)),'.', substring(ns0:Amount, ($VARAmtLength-1, 2)))"/>
    </tns:Amount>
</xsl:if>
  

Любая помощь?

Ответ №1:

Я думаю, что ваш код работает нормально.

Просто замените эту строку на существующую:

 <xsl:value-of select="concat(substring(ns0:Amount, 1, ($VARAmtLength - 2)),'.', substring(ns0:Amount, ($VARAmtLength - 1), 2))" />
  

1. Вокруг оператора вычитания ‘-‘ должен быть пробел. В противном случае это будет рассматриваться $VARAmtLength- как имя переменной.

2. Вы неправильно расставили круглые скобки для второй substring() функции.

Ответ №2:

XML

 <amount>0001234567</amount>
  

Xsl

 <xsl:template match="/">
    <xsl:variable name="length" select="//amount"/>
    <xsl:if test="$length>0">
    <amount>
        <xsl:variable name="ajeet" select="concat(substring(//amount, 1, 8), '.')"/>
        <xsl:variable name="kumar" select="substring(//amount, 9, 2)"/>
        <xsl:value-of select="concat($ajeet, $kumar)"/>
    </amount>
    </xsl:if>
</xsl:template>