2017-12-20 4 views
1

私のenv私は別の組織のアカウントの詳細を取得するために2回の呼び出しを行いますが、両方の組織はアカウントの詳細を返しますが、accountNumberに先頭のゼロリクエストとレスポンスのアカウント番号を比較しているときに失敗しています。xsltを使用して、xmlから余分なゼロを削除する方法はありますか?xsltを使用してXMLノードの値から先行ゼロを削除する方法

<EAI> 
    <SvcRS> 
     <accountHeader> 
      <errorHost>orgA</errorHost> 
     </accountHeader> 
     <accoutnDetails> 
      <accountNumber>0000000111118800</accountNumber> 
      <accountType>credit</accountType> 
      <errorDetails> 
       <code>111</code> 
       <description>Account is not valid</description> 
      </errorDetails> 
     </accoutnDetails> 
    </SvcRS> 
    <SvcRS> 
     <accountHeader> 
      <errorHost>orgB</errorHost> 
     </accountHeader> 
     <accoutnDetails> 
      <accountNumber>000111118800</accountNumber> 
      <accountType>credit</accountType> 
      <errorDetails> 
       <code>0001</code> 
       <description>Not enough balance</description> 
      </errorDetails> 
     </accoutnDetails> 
    </SvcRS> 
</EAI> 

おかげで、XSLT 2で

+0

/あなたがXSLTのバージョンを使用することができ、あなたが使っていますか?その 'accountNumber'は常に整数であるのですか、あるいは文字を含むことができますか? –

+0

私はxslt 1.0または2.0を使用することができます、accountNumberは常に整数値です –

+0

@kekukekuあなたはフォーマット番号機能を使用することができます、以下の私の答えを参照してください。 –

答えて

0

以降、文字列操作で先頭のゼロを除去するxsl:template match="accountNumber"の文脈でreplace(., '^0+', '')を使用することができる(http://xsltfiddle.liberty-development.net/3Nqn5Y3/1)か、それを変換することによって、先行ゼロを削除するためにxs:integer(.)を使用することができ要素の内部の値を整数(http://xsltfiddle.liberty-development.net/3Nqn5Y3)に変換します。

+0

こんにちは私はノードの属性値を取得しています。ノードは完全ではありません –

+0

' 0000000111118800'という入力にリンクしているサンプルでは、 111118800 'ですので、あなたが求めた代用品です。リンクされたスニペットはXSLT 2ではなくXSLT 3ですが、完全なXSLT 2ソリューションが必要な場合は、 ''を '口座番号を操作する。 –

+0

説明と例としてMartinに感謝します。私はXSLT 2に変更しています。 –

2

あなたは以下のようにformat-number機能を使用することができます。

<xsl:value-of select="format-number(.//accountNumber, '#')"/> 

結果:

111118800 
関連する問題