0
位置
我有這樣一個XML文件動態變化的屬性,XSLT - 添加基於
<doc>
<lo>
<li>text1</li>
<li>text2</li>
<li>text3</li>
<li>text4</li>
<li>text5</li>
<li>text6</li>
<li>text7</li>
<li>text8</li>
<li>text9</li>
<li>text10</li>
<li>text11</li>
<li>text12</li>
<li>text13</li>
<li>text14</li>
<li>text15</li>
<li>text16</li>
</lo>
</doc>
我需要padding
屬性動態地添加到列表中的項目。添加padding
的序列從25開始每個乘法器5應該通過損害序列添加填充值。
例如:
5th list item: padding=25
10th list item: padding=20
15th list item: padding=15
10th list item: padding=10
和第五乘法器的每一個第一前置兄弟和以下同級shold獲得填補值-3從中間第五乘法器。
如:
4th list item: padding=22
5th list item: padding=25
6th list item: padding=22
9th list item: padding=17
10th list item: padding=20
11th list item: padding=17
所以品嚐預期的輸出應該是這樣的,
<doc>
<lo>
<li>text1</li>
<li>text2</li>
<li>text3</li>
<li padding ="22">text4</li>
<li padding ="25">text5</li>
<li padding ="22">text6</li>
<li>text7</li>
<li>text8</li>
<li padding ="17">text9</li>
<li padding ="20">text10</li>
<li padding ="17">text11</li>
<li>text12</li>
<li>text13</li>
<li padding ="12">text14</li>
<li padding ="15">text15</li>
<li padding ="12">text16</li>
</lo>
</doc>
我寫了下面的XSLT爲做這個任務,
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="li">
<li>
<xsl:choose>
<xsl:when test="(abc:get-list-position(.) mod 5) =0">
<xsl:attribute name="padding" select="25"/>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
</li>
</xsl:template>
<xsl:function name="abc:get-list-position">
<xsl:param name="node"/>
<xsl:sequence select="count($node/preceding-sibling::li) + 1"/>
</xsl:function>
但由於XSLT那樣沒有增量變量和高級循環,我正努力進一步擴展我的邏輯。任何人都可以建議我如何使用XSLT實現此任務。