問題出在表單的基礎數據結構中的number-columns-repeated屬性到table:table-cell元素。詳情請參閱http://user.services.openoffice.org/en/forum/viewtopic.php?f=45&t=29674和http://user.services.openoffice.org/en/forum/viewtopic.php?f=9&t=11865。
雖然後面的鏈接聲稱已經解決了這個問題,但解決方案並不完全符合我的要求。我需要一個簡單的基於索引的解決方案,它允許更靈活的xml代。這是我試圖解決的問題。
我已經使用xslt 2.0來使用用戶定義的函數。這裏是樣式表...
<xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="no"/>
<xsl:function name="my:getColumnValue">
<xsl:param name="tableRow" as="node()"/>
<xsl:param name="colIndex"/>
<xsl:param name="currentIndex"/>
<xsl:choose>
<xsl:when test="$currentIndex < $colIndex">
<xsl:variable name="repeatColumns" select="$tableRow/table:table-cell[$currentIndex]/@table:number-columns-repeated"/>
<xsl:choose>
<xsl:when test="$repeatColumns">
<xsl:choose>
<xsl:when test="$currentIndex + $repeatColumns - 1 >= $colIndex"><xsl:value-of select="$tableRow/table:table-cell[$currentIndex]"/></xsl:when>
<xsl:otherwise><xsl:value-of select="my:getColumnValue($tableRow, $colIndex - $repeatColumns + 1, $currentIndex + 1)"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="my:getColumnValue($tableRow, $colIndex, $currentIndex + 1)"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="$tableRow/table:table-cell[$colIndex]"/></xsl:otherwise>
</xsl:choose>
</xsl:function>
<xsl:template match="//table:table">
<Tests>
<!-- Process all table rows -->
<xsl:variable name="colCount" select="count(table:table-row[1]/table:table-cell)"/>
<xsl:for-each select="table:table-row">
<xsl:if test="position() > 1">
<Test>
<SrNo><xsl:value-of select="my:getColumnValue(.,1,1)"/></SrNo>
<Name><xsl:value-of select="my:getColumnValue(.,2,1)"/></Name>
<Age><xsl:value-of select="my:getColumnValue(.,3,1)"/></Age>
<Height><xsl:value-of select="my:getColumnValue(.,4,1)"/></Height>
<Address><xsl:value-of select="my:getColumnValue(.,5,1)"/></Address>
</Test>
</xsl:if>
</xsl:for-each>
</Tests>
</xsl:template>
上面使用的標籤是隻是佔位符。請用你的xslt中的適當的替換它們。該解決方案受到xslt處理器允許的遞歸調用次數的限制。
如果xslt 1.0支持以params的形式發送節點,那麼我們可以嘗試替換上述udf以獲得基於模板的解決方案。如果你發現任何錯誤,請讓我知道。
感謝您發佈代碼。如果你可以投我的答案,如果它是有用的,也將有所幫助:) – 2012-07-25 17:34:49