似乎有不少類似的問題,但他們都沒有幫助我。我想重構下面這段XSLT:我可以用xslt中的計數器創建一個循環嗎?
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '1']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '2']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
<fo:table-cell xsl:use-attribute-sets="table-item-bordered">
<fo:block>
<xsl:value-of select="/forms//instance[@versionNumber = '3']/content//textbox[@id = $id]/text()" />
</fo:block>
</fo:table-cell>
請注意更改的versionNumber屬性。
XML源代碼看起來是這樣的:
<forms>
<instance versionNumber="3">
<content>
<textbox id="1">THREE</textbox>
</content>
<previousVersions>
<instance versionNumber="1">
<content>
<textbox id="1">ONE</textbox>
</content>
</instance>
<instance versionNumber="2">
<content>
<textbox id="1">TWO</textbox>
</content>
</instance>
</previousVersions>
</instance>
</forms>
輸出的格式應該是這樣一個錶行:
+-----+-----+-------+
| ONE | TWO | THREE |
+-----+-----+-------+
在代碼中,這將是這個樣子:
<table-cell>ONE</table-cell>
<table-cell>TWO</table-cell>
<table-cell>THREE</table-cell>
這將很容易,而不使用循環計數器,但我總是需要3個單元格,無論有多少個版本。如果沒有與VERSIONNUMBER = 3沒有實例,該表需要是這樣的:
+-----+-----+-----+
| ONE | TWO | |
+-----+-----+-----+
或者在XML:
<table-cell>ONE</table-cell>
<table-cell>TWO</table-cell>
<table-cell></table-cell>
您不需要XSLT中的循環計數器。什麼是'$ instanceId'和'$ id'?同時顯示您的輸入的相關部分和您想要創建的輸出。也許這些變量不是必需的。 – Tomalak
我已更新該問題。我寧願不使用循環計數器,因爲xslt是一種避免循環的函數式語言。在函數式語言中,我可能會在集合[1,2,3]上調用'map'並從那裏開始,是否有XSLT等同於這樣做? – Hannesh
請將您的預期輸出**作爲代碼**發佈。 –