編碼備用錶行具有以下結構:我如何通過XSLT
<root>
<relation type="relation1">
<entityType1>a</entityType1>
<entityType2>1</entityType2>
<entityType2>2</entityType2>
<entityType2>3</entityType2>
</relation>
<relation type="relation2">
<entityType3>b</entityType3>
<entityType4>7</entityType4>
<entityType4>8</entityType4>
<entityType4>9</entityType4>
</relation>
<relation type="relation3">
<entityType5>c</entityType3>
<entityType6>10</entityType4>
<entityType6>11</entityType4>
<entityType6>12</entityType4>
</relation>
</root>
我需要通過XSLT轉換爲包含HTML表格:
<table>
<tr class="odd"><td>
a --> 1
</td></tr>
<tr><td>
a --> 2
</td></tr>
<tr class="odd"><td>
a --> 3
</td></tr>
<tr><td>
b --> 7
</td></tr>
<tr class="odd"><td>
b --> 8
</td></tr>
<tr><td>
b --> 9
</td></tr>
<tr class="odd"><td>
c --> 10
</td></tr>
<tr><td>
c --> 11
</td></tr>
<tr class="odd"><td>
c --> 12
</td></tr>
</table>
請注意奇/偶交替的表格行。我需要通過XSLT編碼這些。可能?
的基本問題其實是如何可以保持一個索引變量來表示,如果當前行是奇數還是偶數而分析這種結構。 這將足以解決這個問題,因爲我現在有一個......爲2種關係類型,然後我通過一個迭代的,每過relation1/entityType2,另一個爲,每過relation2/entityType4。
謝謝!
UPDATE-1:
請注意,通過兩個relation1和relation2 XML元素生成的表進行迭代,並且它必須以某種方式保持這兩個類型的關係中運行全局索引正確設置奇/偶上課的時候完成關係1迭代並傳遞給關係2。
更新2:
目前我有一個類似的代碼,但我不知道如何輕鬆重構它來處理類=「奇」在TR上設置。模板Display_Relation當前顯示關係文本。
<xsl:template match="relation">
<xsl:choose>
<xsl:when test="contains(@xsi:type, 'relation1')">
<xsl:for-each select="entityType2">
<tr><td>
<xsl:call-template name="Display_Relation1">
<xsl:with-param name="source" select="../entityType1/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
<xsl:when test="contains(@xsi:type, 'relation2')">
<xsl:for-each select="entityType4">
<tr><td>
<xsl:call-template name="Display_Relation2">
<xsl:with-param name="source" select="../entityType3/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
<xsl:when test="contains(@xsi:type, 'relation3')">
<xsl:for-each select="entityType6">
<tr><td>
<xsl:call-template name="Display_Relation3">
<xsl:with-param name="source" select="../entityType5/text()"/>
<xsl:with-param name="destination" select="./text()"/>
</xsl:call-template>
</td></tr>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>
聽起來好像你做了很多'的xsl:換each' ...如果您發佈XSLT,有人可能有一個更好的辦法的建議。我下面*答案應該*仍與你'XSL工作:換each'的,但很難說肯定沒有看到代碼。 – 2012-03-13 19:43:04