我需要你聪明的头脑! 我有下一个问题:我有一个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>
我有元素,其中我有元素,我想每个都有一些来自“数组”的值。 (类似的东西:甚至在某些循环中)。
我该怎么做?任何建议都将非常有用,并尽快!
感谢。
答案 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)。