XSLT1.0通过调用tempate一组节点名称(类似于[a1,a2,a3]中的x)



这是这个问题的扩展。

我有一个类似的XML片段

<lines>
    <item><code>1.1</code><amt>1000.00</amt></item>
    <item><code>1.3.1</code><amt>2000.00</amt></item>
    <item><code>1.3.2</code><amt>3000.00</amt></item>
    <item><code>2.1</code><amt>4000.00</amt></item>
    ...
</lines>

我想把一些预先定义好的代码加起来。多亏了一个建议,现在我可以这样做了:

<xsl:value-of select="sum(item[code=1.1 or code=1.2 or 
code=1.3.1 or code=1.3.2]/amt)"/>

但我想创建一个模板,并用易读的params调用它,列出所有需要的代码。类似于:

... <xsl:with-param name="set" select="'1.1, 1.2'"/> ...
or
... <xsl:with-param name="set" select="'(1.1)|(1.2)'"/> ...

然后在调用的模板中执行类似的操作:

<xsl:value-of select="sum(item[code in $set]/amt)"/>

这在XSLT中可能吗?

附言:我使用的是SAP XSLT处理器,它受到了很大的限制,例如没有matches()。

<xsl:variable name="set"
    select="'(1.1)(1.2)(2.1)'"/>
<xsl:template match="/">
    <answer>
        <xsl:call-template name="sum-it">
            <xsl:with-param name="set" select="$set"/>
            <xsl:with-param name="items" select="lines/item"/>
        </xsl:call-template>
    </answer>
</xsl:template>
<xsl:template name="sum-it">
    <xsl:param name="set"/>
    <xsl:param name="items"/>
    <xsl:value-of select="sum(
        $items[contains($set,concat('(', code ,')'))]/amt)"/>
</xsl:template>

相关内容

  • 没有找到相关文章