Xslt Добавление скобок '()' для отрицательных значений в ответе при разборе файла xsl - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь сгенерировать файл pdf из ответа покоя, используя xslt. Все работает нормально, но в отрицательных значениях добавляется скобка, окружающая значение суммы. Как для суммы = 500 $, она работает нормально, но для суммы = -600 $ она дает ( 600 $ ).

<fo:table-cell>                     
    <fo:block>
    <xsl:value-of select="currency:getFormattedCurrency(amount/currency/text(), amount/amount/text())" />
    </fo:block>
</fo:table-cell>

вот мой getFormattedCurrency ()

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(currencyLocale);
        currencyFormatter.setCurrency(currency);
        return currencyFormatter.format(amount);

Я также попробовал другой способ использования serve () из xslt, так что я могу определить, имеет ли он строку отрицательного знака, и могу по-разному относиться к этим отрицательным значениям и к положительным значениям. как это -

<fo:table-cell>
    <fo:block>
        <xsl:choose>
            <xsl:when test="contains(string(availableAmount), '-')">
                <xsl:value-of select="-1*(currency:getFormattedCurrency(availableAmount/currency/text(), availableAmount/amount/text()))" />
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="currency:getFormattedCurrency(availableAmount/currency/text(), availableAmount/amount/text())" />
            </xsl:otherwise>
        </xsl:choose>                           
    </fo:block>                     
</fo:table-cell>

Поиск предложений / решений для достижения целевого результата путем предпочтительного изменения файла xsl. Прикрепленное изображение того, что я получаю для отрицательных значений с помощью скобок и положительных значений правильно а вот пи c что на самом деле нужно. correct required values

Рад принять другой способ решения этой проблемы. :)

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Разные страны имеют разный формат валюты, поэтому, когда речь идет о США, в скобках отображается отрицательная сумма (), а в Индии - отрицательная сумма со знаком минус. XSL автоматически форматирует эту запись в соответствии с валютой страны. Следовательно, на самом деле это не проблема, это просто способ представления другого формата валюты.

0 голосов
/ 25 февраля 2020

Итак, здесь вы заменяете select и java на format-number. И, создавая формат на лету. Это немного осложнение. Посмотри, хочешь ли ты этого.

<fo:table-cell>
  <fo:block>
    <xsl:value-of select="format-number(availableAmount/amount, concat('#,###', availableAmount/currency, ';', '-#,###', availableAmount/currency))" />
  </fo:block>
</fo:table-cell>  
...