在XSLT中使用脚本标记内的位置函数

时间:2015-11-05 22:13:58

标签: xml xslt

以下是完整的代码:

<xsl:for-each select="/*/hundreds/hundred">
<div class="page_spacer" />
<div class="page_section" style="{./style}">
<h2><xsl:value-of select="./label"/></h2>
<div id="graphDiv{position()}"></div>
<script>
var ctx = createCanvas("graphDiv{position()}");
var graph = new BarGraph(ctx);
graph.maxValue = 30;
graph.margin = 2;
graph.colors = ["#49a0d8", "#d353a0", "#ffc527", "#df4c27"];
graph.xAxisLabelArr = ["North", "East", "West", "South"];
setInterval(function () {
    graph.update([Math.random() * 30, Math.random() * 30, Math.random() * 30, Math.random() * 30]);
}, 1000);   
</script>
<xsl:value-of select="./descriptiontext" />
<button onclick="javascript:window.location.href='{./viewalllink}'"><xsl:value-of select="./viewalllabel" /></button>
<br/>
<xsl:for-each select="./contendors/contendor">
    <a href="/location/{./locid}" ><img class="locationthumb" src="/act/locationthumb/{./locid}"/></a>
</xsl:for-each>
</div>
</xsl:for-each>

我想要完成的是以下内容:

<div id="graphDiv{position()}"></div>
<script>
var ctx = createCanvas("graphDiv{position()}");

如果你看一下,在我的XSLT中,我将div分配给graphDiv1,如果它在第一个位置。在我的脚本中,我呼叫createCanvas function。不幸的是,我需要将值graphDiv1传递给createCanvas function

所以,我需要将position放入调用script的{​​{1}}。

我确定我做错了,这只是我第二天使用XSLT。

这是我的createCanvas

XML

2 个答案:

答案 0 :(得分:0)

此链接可以帮助您:

http://www.ibm.com/developerworks/library/x-tiphtml/

但不是

<xsl:value-of select="value"/>

你需要这样做:

<xsl:value-of select ="position()"/>

答案 1 :(得分:0)

当您创建前面的div元素时,您正在执行此操作(这很好):

 <div id="graphDiv{position()}"></div>

大括号被称为Attribute Value Templates,意味着对它们内部的表达式进行求值以输出结果。顾名思义,这仅在属性值中有效,而在纯文本节点中无效。对于文本节点,您可以使用xsl:value-of

    <script>
    var ctx = createCanvas("graphDiv<xsl:value-of select="position()" />");
    var graph = new BarGraph(ctx);

初看起来可能看起来“奇怪”,但请记住,XSLT并不了解javascript。就XSLT而言,它只是一段文字。您只是输出名称为script的元素,该元素具有文本节点作为子元素,并且包含position()的值作为该文本的一部分。