文字列変数の内容を操作として評価したいと考えています。xsltの操作として文字列を評価する方法はありますか?
私の変数には、この文字列です: 1 + 1 + 0
私はこれを操作するようにしたいとXSLT 2.0で値が事前に2
おかげで、 グスタボ
文字列変数の内容を操作として評価したいと考えています。xsltの操作として文字列を評価する方法はありますか?
私の変数には、この文字列です: 1 + 1 + 0
私はこれを操作するようにしたいとXSLT 2.0で値が事前に2
おかげで、 グスタボ
を取得します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>
あります。多くの製品にはこれを行う拡張機能があります(たとえばsaxon:evaluate()を参照)。 XSLT 3.0には一般的なメカニズム、xsl:evaluate命令が導入されています。
ありがとうございます。ありがとうございます。 – Gust
非常に限られた表現クラスでのみ動作します。 –