簡體   English   中英

在XSLT中,可以在使用參數調用模板的過程中使用xpath表達式的值

[英]In XSLT is it possible to use the value of an xpath expression in a call to a template using an param

我正在執行xsl轉換,並在其中使用以下代碼調用帶有參數的模板

<xsl:call-template name="GenerateColumns">
     <xsl:with-param name="curRow" select="$curRow"/>
     <xsl:with-param name="curCol" select="$curCol + 1"/>
</xsl:call-template>

這將調用模板函數,該函數輸出HTML中表元素的一部分。 curRow和curCol用於確定表格中的行和列。 gbl_maxCols設置為html表中的列數

<xsl:template name="GenerateColumns">
   <xsl:when test="$curCol &lt;= $gbl_maxCols">
       <td>
       <xsl:attribute="colspan">
           <xsl:value-of select="/page/column/@skipColumns"/>
       </xsl:attribute> 
   </xsl:when>
</xsl:template>

此函數的結果是一組td元素,但是其中一些元素(具有skipColumn屬性大於1的元素跨越了超過1列,我需要在下次調用generateColumns時跳過這許多列。

就像我在簡單地增加curCol參數的情況下所期望的那樣,但是我有一種情況需要使用數學中xml屬性skipColumns中的值來計算curCol的值。 在上面的案例中,我遍歷了所有列,這對我的大多數用例都適用。 但是,在相同情況下,我需要跳過某些列,並且需要從xml屬性中傳遞該值以計算需要跳過多少列。

我天真的第一次嘗試是這樣的

<xsl:call-template name="GenerateColumns">
     <xsl:with-param name="curRow" select="$curRow"/>
     <xsl:with-param name="curCol" select="$curCol + /page/column/@skipColumns"/>
</xsl:call-template>

但不幸的是,這似乎不起作用。 有什么方法可以將XML頁面中的屬性用於計算xsl中的param值。

我的xml頁面是這樣的(由於xml文件很大,因此進行了大量編輯)

<page>
 <column name="blank" skipColumns="1"/>
 <column name="blank" skipColumns="1"/>
 <column name="test" skipColumns="3"/>
 <column name="blank" skipColumns="1"/>
 <column name="test2" skipColumns="6"/>
</page>

畢竟,我想擁有一組如下的td元素

<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td>

如果我只是遍歷各列,我最終會得到類似這樣的內容,這給了我更多的td元素

<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>

編輯以提供更多信息

我仍然不太確定您要做什么,但是我可以看到您創建$ curCol值時遇到的問題。

您的作業看起來像這樣

<xsl:with-param name="curCol" select="$curCol + **/page/column/@skipColumns**"/>

選擇是將$ curCol的值添加到@skipColumns屬性的序列中。 這是不允許的。 您可以選擇一個特定的屬性並為其添加一個值,例如

<xsl:with-param name="curCol" select="$curCol + /page/column**[1]**/@skipColumns"/>

或者,帶有參數

<xsl:with-param name="curCol" select="$curCol + /page/column**[$index]**/@skipColumns"/>

然后您將獲得所需的價值。

我的理解是,您希望將當前col的編號添加到屬性@skipColumns中的值。

假設上下文節點是“ column”元素:

<xsl:call-template name="GenerateColumns">
 <xsl:with-param name="curRow" select="$curRow"/>
 <xsl:with-param name="curCol" select="number($curCol) + number(@skipColumns)"/>
</xsl:call-template>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM