2016-11-28 32 views
0

私は次のフィールドごとに、によって生成された: 214.2 + 428.4 +は文字列式を数値に変換する方法は?

を終了し、私はサブ-前(価格、「+エンド」)を使用しているが、これは文字列です。

どのように私は214.2 + 428.4を取ることができるすべてのアイデアとそれを集計?

入力: のxml:

<items> 
    <item> 
    <price>12.50</price> 
    <quantity>2</quantity> 
    </item> 
    <item> 
    <price>13.20</price> 
    <quantity>3</quantity> 
    </item> 
</items> 

のxsl:

<xsl:variable name="total"><xsl:for-each select="item"><xsl:value-of select="price*quantity"></xsl:value-of><xsl:text>+</xsl:text></xsl:for-each>end 
</xsl:variable> 

出力: 25,39.6

は、高度にありがとうございます。

+0

私達にあなたの元を表示してくださいあなたが始めた方法は、おそらく最良の選択ではありません。 –

+0

XML: 12.50 13。20 XSL: + end 出力: 25 + 39.6 – kokos

+0

上記を参照してください – kokos

答えて

0

私はあなたがそれをこのようにしてみてくださいお勧めします:

XSLTあなたの例の入力に印加さ1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common" 
extension-element-prefixes="exsl"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/items"> 
    <xsl:variable name="subtotals"> 
     <xsl:for-each select="item"> 
      <amount> 
       <xsl:value-of select="price * quantity"/> 
      </amount> 
     </xsl:for-each> 
    </xsl:variable> 
    <total> 
     <xsl:value-of select="sum(exsl:node-set($subtotals)/amount)"/> 
    </total> 
</xsl:template> 

</xsl:stylesheet> 

を、結果は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<total>64.6</total> 
+0

変換できません:行0のエラー:登録されていない機能 – kokos

+0

使用しているプロセッサはどれですか?あなたがわからない場合は、こちらをご覧ください:http://stackoverflow.com/questions/25244370/how-can-i-check-which-xslt-processor-is-being-used-in-solr/ 25245033#25245033 –

+0

大変ありがとうございました – kokos

0

文字列に有効なXPath式が含まれている場合は、XPath式を動的に評価する必要があります。しかしこれは、XSLT 1.0の標準機能ではありません。

  • それはXSLとXSLT 3.0で利用可能です:命令
  • を評価することは、ベンダー拡張(通常は名前のXXとして多くのXSLTプロセッサで利用可能です:evalの()またはxxは:
  • あなたは拡張子を呼び出すために選択したプロセッサによって提供されるメカニズムを使用して、拡張機能として自分自身をそれを実装することができるかもしれません)(評価

を別の方法として、あなたは文字列が含まれていることがわかっている場合。プラス記号で区切られた数字のシーケンス、トークンを抽出して数値に変換し、それらを合計するための再帰的テンプレートを書くことができます。あるいは、それが常に2つの数字であれば、再帰は必要ありません。

頻繁に起こるように、プログラムで処理する必要がある入力の例を1つだけ持つだけでは不十分です。すべての可能な入力のセットが何であるかを知る必要があります。

+0

こんにちはマイケル、あなたの選択肢が私が必要です。常にプラス記号で区切られた数字が含まれています – kokos

+0

その場合、最も簡単な方法は、exslt.orgのstr:tokenizeテンプレートを探して、必要に応じて変更することです。 –

関連する問題