用十进制数减

时间:2019-02-06 13:16:46

标签: xslt-2.0 xslt-3.0

我要根据条件减去-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以下尝试过,并获得了50%的1.165964915E7。

               <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 :(得分:0)

考虑您的给定输入如下:

<?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>

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>