Вычитание по десятичному числу - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть, чтобы вычесть сумму -1 на основе условия. Пожалуйста, любая помощь.

Ввод:

          <JD>
      <GP xmlns="">
       I xmlns="">
            <PK>40</PK> 
        <A/> 
        <AMNT>11659650.15</AMNT>
        <B/> 
        <C/> 
       </I>
       <I xmlns="">  
        <PK>50</PK> 
        <A/>
        <AMNT>11659650.15</AMNT>
        <B/> 
        <C/> 
         </I>
        </GP>
            </JD>

Попробовал с ниже XSLT и получил 1.165964915E7 для 50.

               <xsl:for-each select="JD/mo:GP/I">                     
                     <xsl:if test="PK='40'">
    <xsl:variable name="a" select="AMNT"/>
    <xsl:element name="AMT">
    <xsl:value-of select="$a"/>
    </xsl:element>
    </xsl:if>
    <xsl:if test="PK='50'">
   <xsl:variable name="a" select="AMNT"/>
   <xsl:element name="AMT">
        <xsl:value-of select="$a - 1"/>
    </xsl:element>
    </xsl:if>

1 Ответ

0 голосов
/ 06 февраля 2019

Учитывая ваш ввод данных следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
<JD>
    <GP>
        <I>
            <PK>40</PK>
            <A />
            <AMNT>11659650.15</AMNT>
            <B />
            <C />
        </I>
        <I>
            <PK>50</PK>
            <A />
            <AMNT>11659650.15</AMNT>
            <B />
            <C />
        </I>
    </GP>
</JD>
</Root>

В XSLT 2.0 , вы можете попробовать его, используя xs:decimal, как показано ниже:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="/Root">
    <xsl:for-each select="JD/mo:GP/I">
        <xsl:if test="PK='40'">
            <xsl:variable name="a" select="AMNT" />
            <xsl:element name="AMT">
                <xsl:value-of select="$a" />
            </xsl:element>
        </xsl:if>
        <xsl:if test="PK='50'">
            <xsl:variable name="a" select="AMNT" />
            <xsl:element name="AMT">
                <xsl:value-of select="xs:decimal($a) - 1" />
            </xsl:element>
        </xsl:if>
    </xsl:for-each>
</xsl:template>

In XSLT 1.0 , используйте функцию format-number():

<xsl:template match="/Root">
    <xsl:for-each select="JD/mo:GP/I">
        <xsl:if test="PK='40'">
            <xsl:variable name="a" select="AMNT" />
            <xsl:element name="AMT">
                <xsl:value-of select="$a" />
            </xsl:element>
        </xsl:if>
        <xsl:if test="PK='50'">
            <xsl:variable name="a" select="AMNT" />
            <xsl:element name="AMT">
                <xsl:value-of select="format-number($a - 1, '0.##')" />
            </xsl:element>
        </xsl:if>
    </xsl:for-each>
</xsl:template>
...