在xsl中传递一个double数组作为参数

时间:2010-08-16 14:02:09

标签: xslt

我需要你聪明的头脑! 我有下一个问题:我有一个xsl文档,我想将一个数组作为param(或变量)传递给这个xsl来迭代它。

 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet version="1.0" 
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="properties.xsl" />
<xsl:param name="upperLimit" />
<xsl:param name="value" />
<xsl:variable name="array" />
<xsl:template match="/">
    <Chart zdepth="60" exeTime="2" chartOrder="area,column">
        <categories>
            <category label="Jan"/>
            <category label="Feb"/>
            <category label="Mar"/>
            <category label="Apr"/>
            <category label="May"/>
            <category label="Jun"/>
            <category label="Jul"/>
            <category label="Aug"/>
            <category label="Sep"/>
            <category label="Oct"/>
            <category label="Nov"/>
            <category label="Dec"/>
        </categories>
        <dataset seriesName="budget" color="1E90FF" plotBorderColor="1E90FF" renderAs="column">
            <set value="{$value}"/>
            <set value="32800"/>
            <set value="32600"/>
            <set value="29600"/>
            <set value="32600"/>
            <set value="32600"/>
            <set value="31800"/>
            <set value="36700"/>
            <set value="29700"/>
            <set value="31900"/>
            <set value="32900"/>
            <set value="34800"/>
        </dataset>
        <dataset seriesName="sales" color="EE2C2C" plotBorderColor="EE2C2C" renderAs="area">
            <xsl:for-each select="$array">
                <xsl:copy-of select="."/>
            </xsl:for-each>

        </dataset>
        <styles>
            <definition>
                <style name="captionFont" type="font" size="15"/>
            </definition>
            <application>
                <apply toObject="caption" styles="captionfont"/>
            </application>
        </styles>

        <xsl:call-template name="properties"/>

    </Chart>
</xsl:template>

我有元素,其中我有元素,我想每个都有一些来自“数组”的值。 (类似的东西:甚至在某些循环中)。

我该怎么做?任何建议都将非常有用,并尽快!

感谢。

1 个答案:

答案 0 :(得分:0)

XSLT 1.0和XPath 1.0没有任何足够接近“双打数组”的内容。

在XSLT中,这样的数组可以通过一个元素的节点集来模拟,只有一个文本节点子节点(XSD术语中的内容很简单),例如:

<num>1.2345</num>
<num>2.2345</num>
<num>3.2345</num>
<num>4.2345</num>
<num>-.2345</num>

这样的节点集可以通过转换的调用者作为外部参数传递,这样做的方式取决于具体的XSLT处理器。例如,将参数传递到XslCompiledTransform.Transform()的方式是 here

如果上述节点集已作为名为xsl:param的全局定义pDoubles的值传递,则

$pDoubles[$k]选择节点集中的$ k-th num元素,并且它的text-node子元素可以隐式地用在其他表达式中。例如:

$pDoubles[1] + $pDoubles[2]

评估为

3.469

在XPath 2.0中(因此在XSLT 2.0中),有一种数据类型更接近于值数组 - 序列数据类型

最接近XPath 2.0中的双精度数组是一系列双精度数(xs:double)。此类序列可作为外部参数传递给XSLT 2.0转换,并再次详细说明如何执行此操作是特定于供应商的。例如,如何为Saxon执行此操作,请查看 here

请注意:XPath 1.0中的节点集和XPath 2.0中的序列模拟数组 - 它们不是数组,其中一个最重要的区别是数组访问速度非常快(O(1)),对节点集/序列的任意节点/项的访问可以是O(N)。