2010-08-16 79 views
2

我需要你的聰明才智! 我有下一個問題:我有一個xsl文件,我想傳遞一個數組作爲參數(或變量)到這個xsl來遍歷它。在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

哪種編程語言... – codymanix 2010-08-16 14:11:57

+0

好問題(+1)。請參閱我的答案,以詳細描述在XSLT 1.0和XSLT 2.0中代表雙精度元素的現有可能性。 – 2010-08-16 16:09:38

回答

0

XSLT 1.0和XPath 1.0沒有足夠的「雙打數組」。

在XSLT這樣的陣列可以由一個節點組元素與單個文本子節點(在XSD術語somple內容),如此進行仿真:

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

這種一個節點集可以作爲外部參數由變換的調用者傳遞,並且這樣做的方式取決於具體的XSLT處理器。例如,將參數傳遞給XslCompiledTransform.Transform()的方式定義爲here

如果上述節點集已經爲名爲pDoubles全局定義xsl:param的值,然後被通過

$pDoubles[$k]選擇的節點集合,它的文本節點孩子可以在$ k個num元在其他表達式中隱含使用。例如:

$pDoubles[1] + $pDoubles[2]

評估爲

3.469 

在XPath 2.0(並因此在XSLT 2.0)有一個數據類型,它是更接近值的陣列 - 的序列數據類型

最接近XPath 2.0中的雙精度數組是雙精度序列(xs:double)。這樣的序列可以作爲外部參數傳遞給XSLT 2.0轉換,並且再次詳細說明如何做到這一點是供應商特定的。例如,如何爲撒克遜這樣做,看看here

待辦事項:節點集在XPath 1.0和序列XPath 2.0中僅模擬陣列 - 它們不是陣列和最重要的區別之一是,雖然一個數組訪問極快(O( 1)),對節點集/序列的任意節點/項的訪問可以是O(N)。