2017-03-03 11 views
-1

XSLTから数値を掛けようとしていますが、結果は正しくありません。 なぜこのように起こっているのか分かりません。XSLTの乗算の問題

XML入力:

<jdeResponse xmlns="http://www.schemas.e1.oracle.com" xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/jms/GWI/PurchaseOrdersFromE1/ser_jms_ConsumePOFromE1" xmlns:pc="http://xmlns.oracle.com/pcbpel/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:ns0="http://www.schemas.e1.oracle.com" xmlns:sch="http://www.schemas.e1.oracle.com" pwd="" token="" role="*ALL" type="realTimeEvent" category="RTE" user="C-SPATIL" session="8aa5b38" environment="JPY900" responseCreator="XAPI" InterfaceIdentifier="AFFYMETRIX" E1UpdateFlag="Y"> 
    <ns0:event>    
     <ns0:body elementCount="8"> 
      <ns0:detail_D4302470B date="03022017" name="R43500 - PurchaseOrderPrint" time="17:58:38" type="RTPODTL" DSTMPL="D4302470B" executionOrder="4" parameterCount="154"> 
       <ns0:mnOrderLineNumber>2.010</ns0:mnOrderLineNumber> 
      </ns0:detail_D4302470B> 
     </ns0:body> 
    </ns0:event> 
</jdeResponse> 

はXSLT:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" 
       xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" 
       xmlns:oraxsl="http://www.oracle.com/XSL/Transform/java" xmlns:ns0="http://www.schemas.e1.oracle.com" 
       xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction" 
       xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:oracle-xsl-mapper="http://www.oracle.com/xsl/mapper/schemas" 
       xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:cst="http://www.oracle.com/XSL/Transform/java/searchandreplacestring.SearchAndReplaceString" 
       xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/top/ref_DB_F47012" 
       xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" 
       xmlns:ns1="http://www.Thermofisher.com/ofm/schema/ProcessPOFromLSGE1ToTargetE1/" 
       exclude-result-prefixes="xsi oracle-xsl-mapper xsl xsd ns0 ns1 tns xp20 oraxsl mhdr oraext dvm xref cst socket" 
       xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/jms/GWI/ProcessPOFromLSGE1ToTargetE1/ser_jms_getPO" 
       xmlns:pc="http://xmlns.oracle.com/pcbpel/" xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/" 
       xmlns:ns3="http://www.Thermofisher.com/ofm/ProcessPOFromLSGE1ToTargetE1BPEL/schema/v1.0/" 
       xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" 
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
       xmlns:ns4="http://xmlns.oracle.com/pcbpel/adapter/db/LSG_AFFY/ProcessPOFromLSGE1ToTargetE1/ref_DB_F47012" 
       xmlns:ns5="http://www.themofisher.com/ofm/otc/ProcessPOFromLSGE1ToTargetE1/schema" 
       xmlns:ns6="http://www.thermofisher.com/ofm/ProcessPOFromLSGE1ToTargetE1/temp_SalesOrderDetailAttachmentManager"> 

    <xsl:template match="/"> 
    <tns:F47012Collection> 
     <xsl:for-each select="/ns0:jdeResponse/ns0:event/ns0:body/ns0:detail_D4302470B"> 
     <tns:F47012> 
      <tns:szrlln> 
      <xsl:value-of select="normalize-space(ns0:mnOrderLineNumber)*1000"/> 
      </tns:szrlln> 
     </tns:F47012> 
     </xsl:for-each> 
    </tns:F47012Collection> 
    </xsl:template> 
</xsl:stylesheet> 

出力:

<?xml version="1.0" encoding="UTF-8"?> 
<tns:F47012Collection xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/jms/GWI/ProcessPOFromLSGE1ToTargetE1/ser_jms_getPO" xmlns:pc="http://xmlns.oracle.com/pcbpel/" xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/" xmlns:ns3="http://www.Thermofisher.com/ofm/ProcessPOFromLSGE1ToTargetE1BPEL/schema/v1.0/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns4="http://xmlns.oracle.com/pcbpel/adapter/db/LSG_AFFY/ProcessPOFromLSGE1ToTargetE1/ref_DB_F47012" xmlns:ns5="http://www.themofisher.com/ofm/otc/ProcessPOFromLSGE1ToTargetE1/schema" xmlns:ns6="http://www.thermofisher.com/ofm/ProcessPOFromLSGE1ToTargetE1/temp_SalesOrderDetailAttachmentManager" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/top/ref_DB_F47012"><tns:F47012> 
    <tns:szrlln>2009.9999999999998</tns:szrlln> 
    </tns:F47012> 
</tns:F47012Collection> 

出力は

2010 
する必要があります

アドバイスをお願いします。

...................................... .................................................. .......................................

おかげ Yatan

+0

XSLTは次のとおりです – Yatan

+1

XSLTの代わりに入力XMLを2回転記しました。 XSLTがなければ誰も答えられません。 –

+0

コメントにコードを投稿しないでください。あなたの投稿を編集して修正してください。 –

答えて

1

XSLT 2.0はあなたのためのオプションがある場合は、小数点算術演算を使用することができます。

... 
<xsl:value-of select="xs:decimal(ns0:mnOrderLineNumber)*xs:decimal(1000)"/> 
... 

XSLT 1.0で、使用することができformat-number

<xsl:value-of select="format-number(ns0:mnOrderLineNumber * 1000, '0.##')"/> 

詳細情報in this answer