2012-04-12 14 views

答えて

0

を取得しますtokenize(),number()およびsum()の関数を使用することによって行うことができます。私は+符号を囲む可能な空白を含めることに注意してください。 (ダミー入力ファイルを使用して)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:variable name="test1">1+1+0</xsl:variable> 
    <xsl:variable name="test2"> 3 + 
    5 +   12 </xsl:variable> 

    <xsl:template match="/"> 
     <xsl:variable name="testSplit1" select="tokenize($test1,'\s*\+\s*')"/> 
     <xsl:variable name="testSplitNum1"> 
      <xsl:for-each select="$testSplit1"> 
       <item><xsl:value-of select="number(.)"/></item> 
      </xsl:for-each> 
     </xsl:variable> 

     <xsl:variable name="testSplit2" select="tokenize($test2,'\s*\+\s*')"/> 
     <xsl:variable name="testSplitNum2"> 
      <xsl:for-each select="$testSplit2"> 
       <item><xsl:value-of select="number(.)"/></item> 
      </xsl:for-each> 
     </xsl:variable> 

     <root> 
      <items1><xsl:copy-of select="$testSplitNum1"/></items1> 
      <sum1><xsl:value-of select="sum($testSplitNum1/item)"/></sum1> 
      <items2><xsl:copy-of select="$testSplitNum2"/></items2> 
      <sum2><xsl:value-of select="sum($testSplitNum2/item)"/></sum2> 
     </root> 

    </xsl:template> 

</xsl:stylesheet> 

結果は文字列値として供給されるXPath式を評価するためのXSLT 1.0またはXSLT 2.0には一般的なメカニズムはありません

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <items1> 
     <item>1</item> 
     <item>1</item> 
     <item>0</item> 
    </items1> 
    <sum1>2</sum1> 
    <items2> 
     <item>3</item> 
     <item>5</item> 
     <item>12</item> 
    </items2> 
    <sum2>20</sum2> 
</root> 
+0

ありがとうございます。ありがとうございます。 – Gust

+0

非常に限られた表現クラスでのみ動作します。 –

1

あります。多くの製品にはこれを行う拡張機能があります(たとえばsaxon:evaluate()を参照)。 XSLT 3.0には一般的なメカニズム、xsl:evaluate命令が導入されています。

関連する問題